在Matlab中调用和处理循环中的变量,这些变量的名称取决于循环索引?

在Matlab中调用和处理循环中的变量,这些变量的名称取决于循环索引?,matlab,Matlab,我需要在Matlab中循环的每次迭代中使用变量,其名称取决于循环索引h(例如,如果h=1,我想使用data1e创建其他变量)。有办法吗?我不能使用单元格,因为变量是非常大的矩阵,我使用单元格时有内存问题 例如: data1=[1,2,3]; data2=[4,5,6]; data3=[7,8,9]; %they are in the workspace for h=1:3 % A`h'=data`h'+6 % save A`h' end 我认为你应该考虑使用结构(参见更多细

我需要在Matlab中循环的每次迭代中使用变量,其名称取决于循环索引
h
(例如,如果
h=1
,我想使用
data1
e创建其他变量)。有办法吗?我不能使用单元格,因为变量是非常大的矩阵,我使用单元格时有内存问题

例如:

data1=[1,2,3];
data2=[4,5,6];
data3=[7,8,9];  %they are in the workspace

for h=1:3
    % A`h'=data`h'+6
    % save A`h'
end

我认为你应该考虑使用结构(参见更多细节)。 比如说

 for h=1:n
     dataName = sprintf('data%d', h); %// dynamic name
     resultName = sprintf('res%d', h); %// dynamic name
     base.(resName) = myFunction( base.(currentName) ); %// process data and save to result
 end
这种方法的优点(特别是当您遇到内存问题时)在于,它支持这种方法:

 for h=1:n
     dataName = sprintf('data%d', h); %// dynamic name

     base = load( 'myHugeMatFile.mat', dataName ); %// loads only one variable from the file
     %// now the variable is a field in base 

     resultName = sprintf('res%d', h); %// dynamic name

     base.(resName) = myFunction( base.(currentName) ); %// process data and save to result

     save( 'myResultsFile.mat', '-struct', '-append', 'base' ); %// please verify this works - I'm not 100% certain here.
 end

请注意如何在需要时将结构字段作为不同的变量处理。

据我所知,您可以创建一个矩阵:

 A = [1 2 3;
      4 5 6;
      7 8 9];
或向量:

A =[1; 2; 3; 4; 5; 6; 7; 8; 9];
在第一种情况下,只是写作

A = [data1;data2;data3];
我们应该做到这一点。否则,查看水平向量的
horzcat
,垂直向量的
vertcat

A = horzcat(data1,data2,data3);
A = vertcat(data1',data2',data3');

你是如何通过细胞而不是相反的方式获得记忆问题的?您是在本地存储它们并单独调用它们,还是将它们保存在MATLAB工作区中?无论如何,请查看
sprintf
fprintf
。我可以提到
eval
,但是我会得到评论说
eval
是邪恶的!我将所有变量保存在Matlab工作区中。我不知道为什么如果我用单元格存储它们,我会遇到内存问题,相反,如果我单独保存它们,我就不会了。@StewieGriffin
eval
是邪恶的!将struct与动态字段名一起使用instead@Shai,我从来没有回答过一个问题,也没有亲自使用过!所以我从来没有收到过这些评论=)这是一个不光彩的提及=P@StewieGriffin真为你高兴!我不清楚。您可以使用我在问题中给出的示例吗?@user3285148不以“平面”方式创建工作区变量,而是作为
base
struct的字段。例如,而不是
data1=[1,2,3]使用
base.data1=[1,2,3]等等。现在您可以使用
h
dn=sprintf('data%d',h')进行访问;base.(dn)
你能用我的例子写下你会做什么吗??这不是我问题的答案,我不明白你的问题。您可能应该遵循动态字段名解决方案。。无论如何,顺便说一句,第一个
A
不是矩阵!在转置时最好使用
(注意点)。它看起来离解决OP的问题还差一点点,但是嘿。。。尝试的要点。只是一个小的,小的评论:MATLAB的一个优点是
不是必需的。这是为了允许复制粘贴表。。。(但它们不会造成任何损害,所以让它们在那里不是问题,,,这不是你必须做的事)=)