如何在MATLAB中将数字连接到变量名?

时间:2010-05-11 09:55:14

标签: matlab variables numbers

我有一个变量a = 1。我想生成一个表单的变量名称:

variableNumber  

所以在这个例子中,我想要

a1
a2
a3

作为变量。我怎么能这样做?

5 个答案:

答案 0 :(得分:20)

我对这个问题的回答是“你确定你真的想这么做吗?”

如果您有一系列这样的变量,那么您将不得不想办法在以后引用所有这些变量,这可能意味着EVAL或其他类似的变量。

如果你知道你将存储的所有内容都是标量,你可以将它们全部存储在一个向量中:

a(1) = 1;
a(2) = 2;
a(3) = 3;

如果你没有标量怎么办?

a{1} = 1;
a{2} = 'Doug';
a{3} = [1 2 3 4];

然后你可以将它们称为{1}或其他。

除非你有充分的理由这样做,否则你最好制作一个单元格数组,结构数组,向量或其他东西。

答案 1 :(得分:9)

尝试genvarname

varname = genvarname(str)

是使用的基本语法。 MATLAB文档提供了使用此函数和排除列表的详细示例(用于确保唯一变量名称)。您必须使用eval或其他函数(例如前面的答案中提到的assignin)才能使用此变量名称。

完全回答这个问题,

varnamelist = genvarname({'a','a','a','a','a'});
for l=1:length(varnamelist)
  eval([varnamelist{l} '= l^2']);
end

当然,有更有效的方法可以将genvarname的输入列表组合在一起,这只是一个练习;)

如果您担心性能,请注意eval可能会大大减慢脚本/功能;我个人建议使用struct或cell数据类型,如果你需要动态变量命名。

答案 2 :(得分:5)

使用assignin

assignin('base', sprintf('variable%d', 1), 1:10)

编辑:正如JS所提到的,结构通常更适合动态字段名称。您可以像这样使用它们:

varnames = {'foo', 'bar'};
str = struct;
for i = 1:length(varnames)
   str = setfield(str, varnames{i}, rand); %#ok<SFLD>
end

str =    
     foo: 0.4854
     bar: 0.8003

或更简单,就像这样:

str2.('alpha') = 123;
str2.('beta') = 1:10;

答案 3 :(得分:2)

我对这个问题的回答是“你确定你真的想这么做吗?”

但如果您的答案是肯定的,那么这就是您的答案:

for k=1:5
  eval(['a' num2str(k) '= k;'])
end

答案 4 :(得分:0)

我一直在将此代码用于Bootstrap神经网络的应用程序

% k fold test with automatic division of data

warning off

% read in X
% read in T

% perform k fold division of input time series called 'K-fold Cross-Validation
% Bootstrap'

CVO = cvpartition(X,'k',10); % creates 10 sub samples of 'X' and divides it into 'training (i.e training and validation)' and 'testing' sets

for i = 1:CVO.NumTestSets
    eval(['xtv' num2str(i) '=X(CVO.training(i));']) % cross-validation training sets of 'X'
    eval(['xt' num2str(i) '=X(CVO.test(i));']) % cross-validation testing set of 'X'
    eval(['ttv' num2str(i) '=T(CVO.training(i));']) % cross-validation training set of 'T'
    eval(['tt' num2str(i) '=T(CVO.test(i));']) % cross-validation testing set of 'T'
end