如何在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