从字符串名称创建变量(Create variables with names from string

2019-08-31 13:34发布

让我们假设我要创建10个变量,应该是这样的:

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

这就是我打算做的简化版本。 基本上,我只是想通过这样以自动的方式创建这些变量保存行代码。 有没有在Matlab中构建一个变量名的可能性? 在我的示例的图案将是["x", num2str(i)] 。 但我不能找到一种方法来创建具有该名称的变量。

Answer 1:

你可以做到这一点的eval ,但你真的应该

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

而使用的单元阵列:

x{i} = i


Answer 2:

我还强烈建议使用细胞阵列或用于这种情况下的结构体。 我认为它甚至会给你一些性能提升。

如果你真的需要这样做丹告知如何。 但我也想指出的genvarname功能。 这将确保您的字符串是一个有效的变量名。

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



Answer 3:

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


Answer 4:

如果任何人有兴趣,从丹的回答正确的语法是:

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

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



Answer 5:

虽然姗姗来迟,我justed想添加另一种答案。

功能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



Answer 6:

我需要这样的事情,因为如果你希望能够在仿真过程中改变他们,你无法从工作区引用结构(或电池阵列我相信)在Simulink模块。

无论如何,这对我来说最好的工作

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


文章来源: Create variables with names from strings