我想知道在给定一定数量的情况下如何使用for循环来创建多个矩阵。
如果给出3,我需要三个基质:C1,C2和C3。
k = 3
for i = 1:K
C... = [ ]
end
不确定如何实施。
答案 0 :(得分:1)
首先想到的是Dennis Jaheruddin提到的eval
功能,是的,这是不好的做法。 So does the documentation say:
为什么要避免使用eval功能?
虽然eval功能非常强大且灵活,但并非如此 始终是编程问题的最佳解决方案。调用的代码 eval通常效率较低,读取和调试也比较困难 使用其他函数或语言结构的代码。例如:
MATLAB®在您第一次运行代码时编译代码,以提高未来运行的性能。但是,因为代码在eval中 语句可以在运行时更改,它不会被编译。
eval语句中的代码可以意外地创建或分配给当前工作空间中已有的变量,覆盖现有的变量 数据
在eval语句中连接字符串通常很难阅读。其他语言结构可以简化您的语法 代码。
“更安全”的替代方案是函数assignin
:
以下内容将完全符合您的要求:
letter = 'C';
numbers = 1:3;
arrayfun(@(x) assignin('base',[letter num2str(x)],[]),numbers)
我知道您需要创建变量的情况,但在大多数情况下,使用单元格数组或结构会更好,更方便。
答案 1 :(得分:0)
诀窍是使用单元格数组:
k=3
C=cell(k,1)
for t=1:k
C{t}= rand(t)
end
如果每个矩阵的大小相等,你可能只想要一个三维矩阵而不是一个单元阵列。
您现在有一个单元格数组,但可以像这样访问矩阵:
C{2} %Access the second matrix.
答案 2 :(得分:0)
在这种情况下,使用eval几乎是不可避免的:
k = 3;
for i = 1:k
eval(sprintf('C%d = [];', i));
end;
请注意,为数据存储生成变量名称而不是为它们编制索引(数字 - 请参阅Dennis Jaheruddin基于单元格数组的解决方案 - 或使用存储数据的命名字段创建动态struct
)几乎总是一个坏主意。除非您这样做以应对一些您不想/不能修改的奇怪脚本,否则需要在全局工作区中创建一些变量。