我需要在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
答案 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
这种方法的好处(特别是如果遇到内存问题)是save
和load
支持这种方法:
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
答案 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');