使用字符串中的名称创建变量

时间:2013-04-19 07:24:05

标签: string matlab variables variable-names

我们假设我想要创建10个变量,如下所示:

x1 = 1;
x2 = 2;
x3 = 3;
x4 = 4;
.
.
xi = i;

这是我打算做的简化版本。基本上我只想通过以自动方式创建这些变量来保存代码行。是否有可能在Matlab中构造变量名?我的示例中的模式为["x", num2str(i)]。但是我找不到用这个名字创建变量的方法。

6 个答案:

答案 0 :(得分:28)

你可以使用eval来完成,但你真的应该

eval(['x', num2str(i), ' = ', num2str(i)]); %//Not recommended

而是使用单元格数组:

x{i} = i

答案 1 :(得分:5)

我还强烈建议在这种情况下使用单元格数组或结构体。我认为它甚至会给你一些性能提升。

如果你真的需要这样做,丹告诉了如何。但我还想指出genvarname函数。它将确保您的字符串是有效的变量名称。

编辑:genvarname是核心matlab的一部分,而不是统计工具箱的一部分

答案 2 :(得分:4)

for k=1:10
   assignin('base', ['x' num2str(k)], k)
end

答案 3 :(得分:1)

如果有其他人感兴趣,Dan的答案的正确语法是:

eval(['x', num2str(i), ' = ', num2str(i)]);

我的问题已包含错误的语法,所以这是我的错。

答案 4 :(得分:1)

虽然它已经姗姗来迟,但我还是希望增加另一个答案。

函数genvarname正是针对这些情况

如果您将它与tmp结构数组一起使用,则不需要eval cmd

此链接中的示例4是如何执行此操作http://www.mathworks.co.uk/help/matlab/ref/genvarname.html

 for k = 1:5
   t = clock;
   pause(uint8(rand * 10));
   v = genvarname('time_elapsed', who);
   eval([v ' = etime(clock,t)'])
   end

一切顺利

的Eyal

答案 5 :(得分:0)

我需要这样的东西,因为如果你想在模拟过程中能够改变它们,你就不能从Simulink块中的工作空间引用结构(或我假设的单元格数组)。

无论如何,对我而言这是最好的

assignin('base',['string' 'parts'],values);