从工作空间中以指定名称开头的所有变量创建矩阵

时间:2015-06-10 02:33:17

标签: matlab

例如,假设我在我的工作区中有100个变量,其名称范围从var_1var_100。现在我想使用名为'var_'的所有变量创建一个矩阵。 我知道我可以尝试列出所有变量,但那将是无效且长的:

A = [var_1 var_2 ... var_100]

有没有更好的方法来完成这个?

2 个答案:

答案 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