如何在MATLAB中连接一个数字到一个variables名?

我有一个variablesa = 1 。 我想要生成一个variables名称的forms:

 variableNumber 

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

 a1 a2 a3 

作为variables。 我怎样才能做到这一点?

尝试genvarname

 varname = genvarname(str) 

是使用的基本语法。 MATLAB文档详细介绍了使用这个函数和排除列表(确保唯一variables名)的例子。 您将不得不使用eval或其他函数(例如在之前的答案中提到的assignin )来使用这个variables名称。

为了完全回答这个问题,

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

当然,还有更有效的方法来组合genvarname的input列表,这genvarname练习;)

如果您担心性能,请注意, eval可能会大大减慢脚本/函数的速度; 我个人build议使用结构或单元格数据types,如果你需要dynamicvariables命名。

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

如果你有一系列这样的variables,那么你将不得不找出一种方法来引用所有这些variables,这可能意味着一个EVAL或其他类似的东西。

如果你知道在这里存储的所有东西都是标量,你可以把它们全部存储在一个vector中:

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

如果你没有标量怎么办?

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

那么你可以把它们称为{1}或其他。

除非你有足够的理由这样做,否则你最好是制作一个单元arrays,结构体,vectorarrays或其他东西。

使用assignin

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

编辑:正如JS提到的,结构通常更好的dynamic字段名称。 你可以像这样使用它们:

 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; 

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

但是,如果你的答案是YES,那么你的答案是:

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

我一直在使用这个代码与Bootstrapneural network的应用程序

 % 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 (ie 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