我们假设我想要创建10个变量,如下所示:
x1 = 1;
x2 = 2;
x3 = 3;
x4 = 4;
.
.
xi = i;
这是我打算做的简化版本。基本上我只想通过以自动方式创建这些变量来保存代码行。是否有可能在Matlab中构造变量名?我的示例中的模式为["x", num2str(i)]
。但是我找不到用这个名字创建变量的方法。
答案 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);