17

假设我想创建 10 个如下所示的变量:

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

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

4

6 回答 6

28

你可以用eval来做,但你真的不应该

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

而是使用单元格数组:

x{i} = i
于 2013-04-19T07:32:59.073 回答
5

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

如果你真的需要这样做,Dan 会告诉你怎么做。但我也想指出该genvarname功能。它将确保您的字符串是有效的变量名。

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

于 2013-04-19T07:51:55.617 回答
4
for k=1:10
   assignin('base', ['x' num2str(k)], k)
end
于 2014-01-17T14:18:15.983 回答
2

虽然早就应该了,但我只是想添加另一个答案。

函数 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

一切顺利

埃亚尔

于 2014-02-26T10:15:57.023 回答
1

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

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

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

于 2013-04-19T07:54:09.700 回答
0

我需要这样的东西,因为如果您希望能够在仿真期间更改它们,您不能从 Simulink 块中的工作区引用结构(或我认为的单元数组)。

无论如何,对我来说这效果最好

assignin('base',['string' 'parts'],values);
于 2013-12-17T09:09:43.023 回答