例如,假设我在我的工作区中有100个变量,其名称范围从var_1
到var_100
。现在我想使用名为'var_'的所有变量创建一个矩阵。
我知道我可以尝试列出所有变量,但那将是无效且长的:
A = [var_1 var_2 ... var_100]
有没有更好的方法来完成这个?
答案 0 :(得分:0)
虽然这可能(绝对是)不是一个好主意,但这是你可以做的:
varstr = 'A = ['
for ii = 1:100
varstr = [varstr, ' var_', num2str(ii)];
end
varstr = [varstr, '];']
eval(varstr)
答案 1 :(得分:0)
eval函数允许您执行一串matlab代码。因此,您只需要生成构造数组的字符串,然后将其传递给eval。幸运的是,这很简单:
eval([ 'A = [' sprintf('var_%d, ', 1:100) ']']);
如果你真的在eval之外做任务,可能会更清楚一些,就像这样
A = eval([ '[' sprintf('var_%d, ', 1:100) ']']);
请注意,此处的字符串有一个额外的尾随逗号。这似乎不是问题,至少在2014b。
如果您不知道变量的总数,可以使用who命令获取它们。这将返回一个字符串的单元格数组,然后您重新格式化并传递给eval,就像这样
my_variables = who('var_*');
% You may want to sort (re-order, take a subset of) my_variables here
str_to_run = '['
for ii=1:length(my_variables)
str_to_run = [str_to_run, my_variables{ii}, ',']
end