Matlab-如何根据其他变量的值命名新变量?

时间:2010-10-07 18:37:13

标签: variables matlab naming naming-conventions

  

可能重复:
  How to concatenate a number to a variable name in MATLAB?
  MATLAB: How can I use a variables value in another variables name?

我想使用函数中给出的其他变量的值来命名变量。 所以,如果我有x1,x2的值,我可以将新变量的名称设为:

x_(x1的值)_(x2的值)作为名称。

我已经检查了eval,num2str,strcat函数,但是到目前为止我无法做到这一点,所以我有一个上面有一个名称的变量,我可以给它赋值。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

请查看以下常见问题解答:

它回答了问题的“如何”部分,并建议使用数组的更好方法。

答案 1 :(得分:2)

作为Jonas suggests,如果x1x2是数字,则可行:

x1 = 3;
x2 = 4;
newValue = 25;

eval(sprintf('x_%i_%i = newValue;',x1,x2));

如果x1x2是字符串,则变为:

x1 = 'foo';
x2 = 'bar';
newValue = 25;

eval(sprintf('x_%s_%s = newValue;',x1,x2));

或更简单(使用连接而不是SPRINTF):

x1 = 'foo';
x2 = 'bar';
newValue = 25;

eval(['x_' x1 '_' x2 ' = newValue']);

我不知道你想要完成什么,但这可能不是最好的方法。 EVAL should always be avoided.在使用EVAL中创建变量(a.k.a。“poofing”)是双重的。

如果您尝试将参数与值相关联,structures是一个更好的解决方案:

x1 = 'foo';
x2 = 'bar';
newValue = 25;

x.([x1 '_' x2]) = newValue;

答案 2 :(得分:1)

假设您有一个非常好的理由为什么要这样做(并假设x1和x2具有整数值),您可以通过组合EVALSPRINTF来实现此目的。

x1 = 3;
x2 = 4;
newValue = 25;
eval(sprintf('x_%i_%i = newValue;',x1,x2));

如果x1和x2是浮点数,它会变得比较棘手,因为变量名称中不能包含点,但只要用其他东西替换点,它仍然是可能的。

但是,我真的要问:你确定要这么做吗?因为目前我无法想象一个应用程序会想要创建您事先不知道的变量名称,这反过来又使编写高效程序变得非常困难。

修改

有许多有用的方法可以将数据存储在数组中。如果您真的不想这样,您可能有兴趣通过MAP中的键/值对访问数据,这是Matlab最新版本中提供的一项功能。因此,您的密钥将变为sprintf('%i_%i',x1,x2),相应的值将是您要存储的任何内容。

答案 3 :(得分:0)

您还可以使用动态字段引用。 Mathworks的Loren在这里写了一篇文章:

Mathworks: use-dynamic-field-references