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

时间:2015-01-15 09:30:23

标签: matlab

我需要在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

2 个答案:

答案 0 :(得分:3)

我认为您应该考虑使用dynamic field names结构(请参阅更多详情here) 例如

 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

这种方法的好处(特别是如果遇到内存问题)是saveload支持这种方法:

 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

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

答案 1 :(得分:-1)

据我了解,你要么想制作一个矩阵:

 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');