2010-10-07 81 views
3

可能重复:
How to concatenate a number to a variable name in MATLAB?
MATLAB: How can I use a variables value in another variables name?Matlab-如何基于其他变量的值命名新变量?

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

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

我已经签出了eval,num2str,strcat函数,但是至今我还是无法做到这一点,所以我有一个变量名称,上面我可以指定一个值。

任何帮助将不胜感激。

+3

这听起来像你应该使用数组来代替。 – JoshD 2010-10-07 18:40:41

+4

这种事情已经被覆盖了几次:[Matlab的:在另一个变量名称中使用变量的值?](http://stackoverflow.com/questions/3346178/matlab-using-a-variables-value-in -another-variables-name),[如何在MATLAB中将数字连接到变量名?](http://stackoverflow.com/questions/2809635/how-to-concatenate-a-number-to-a-variable -name-in-matlab),[使用MATLAB循环函数来命名计算变量](http://stackoverflow.com/questions/3143959/using-matlab-loop-funtion-to-name-calculate-variables)。 – gnovice 2010-10-07 18:44:59

+4

阅读@MatlabDoug的错误编码实践列表,特别是第一点http://blogs.mathworks.com/videos/2010/03/08/top-10-matlab-code-practices-that-make-me -cry/ – Amro 2010-10-07 18:53:05

回答

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),并且相应的值将是您想要存储的任何值。

2

看看下面的FAQ:

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

+1

我不想使用数组。 – max 2010-10-07 18:45:51

+0

@max:你有没有不使用数组的好理由,还是你只使用坏的解决方案? – Doresoom 2010-10-08 14:24:42

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中创建变量(也称为“poofing”)是非常糟糕的。

如果你想用的参数值相关联,structures是一个更好的解决方案:

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

x.([x1 '_' x2]) = newValue; 
相关问题