如何在MATLAB循环中重命名变量?

4

请问有没有办法在MATLAB循环的每次迭代中重命名变量?

实际上,我想在循环中用一个包含循环索引的不同名称保存变量。谢谢。


创建一个大小合适的向量foo,并将其存储在foo(loopidx)中? - Marc Claesen
1
@MarcClaesen,嗨Marc。谢谢,但这不是我想要的方式。应该是类似var_i的形式,其中'i'是循环的当前索引。我需要将每个变量存储在一个MAT文件中。 - Sanchit
3个回答

12

根据您的评论,我建议使用cell数组。这允许通过索引存储任何类型的结果。例如:

foo=cell(bar,1);
for ii=1:bar
    foo{ii}=quux;
end
你可以保存foo来保留所有的中间结果。尽管循环索引没有像你想的那样嵌入变量名中,但这提供了相同的功能。

你可以保存foo来保留所有的中间结果。尽管循环索引没有像你想的那样嵌入变量名中,但这提供了相同的功能。


5
在大多数情况下,最好避免使用 eval,因为有时候它是有害的。 - Lucius II.

8
忽略问题“你为什么需要这个?”, 你可以使用函数 eval() :
例子:
for i = 1:3
  eval(['val' num2str(i) '=' num2str(i * 10)]);
end

输出结果为:
val1 =
    10

val2 =
    20

val3 =
    30

1
虽然这是可能的,但通常不建议这样做,请参见http://matlab.wikia.com/wiki/FAQ#How_can_I_create_variables_A1.2C_A2.2C....2CA10_in_a_loop.3F。Marc Claesean给出的答案是正确的方法。 - am304

0

另一种方法是使用结构体将循环索引保存到字段名称中:

for ii=1:bar
    foo.(["var" num2str(ii)]) = quux;
end

这将创建一个具有诸如 foo.var1foo.var1 等字段的结构。这样做可以满足您的需求,而无需使用 eval


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接