如何在工作区中创建连续编号的变量?

时间:2014-06-04 12:59:16

标签: matlab matrix

我想知道在给定一定数量的情况下如何使用for循环来创建多个矩阵。

如果给出3,我需要三个基质:C1,C2和C3。

k = 3
for i = 1:K
    C... = [ ]
end

不确定如何实施。

3 个答案:

答案 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)几乎总是一个坏主意。除非您这样做以应对一些您不想/不能修改的奇怪脚本,否则需要在全局工作区中创建一些变量。