我有一个2d矩阵(A = 80,42),我试图将它分成(80,1)42次并用不同的名字保存。即。
M_n1
,M_n2
,M_n3
,...等(代表列数)
我试过
for i= 1:42
M_n(i)=A(:,i)
end
它没有工作
如何在不覆盖结果的情况下执行此操作并将每次迭代保存在文件(.txt)中?
答案 0 :(得分:0)
您可以使用eval
for ii = 1:size(A,2)
eval( sprintf( 'M_n%d = A(:,%d);', ii, ii ) );
% now you have M_n? var for you to process
end
但是,eval
的使用是not recommanded,使用单元格数组可能会更好
M_n = mat2cell( A, [size(A,1)], ones( 1, size(A,2) ) );
现在,M_n
的每列都有A
个单元格数组,每个单元格有42个单元格
您可以ii
M_n{ii}
列
答案 1 :(得分:0)
一般来说,如果您考虑做这类事情,请不要这样做:不要。 它不能很好地扩展,并且将它们放在一个阵列中通常会更方便。
只要结果具有相同的形状,您就可以使用标准数组,如果不是,您可以将每个结果放在单元格数组中,例如。 :
results = cell(nTests,1)
result{1} = runTest(inputs{1})
甚至
results = cellfun(@runTest,inputs,'UniformOutput',false); % where inputs is a cell array
等等。
如果您确实希望在每次迭代时将数字写入文件,则可以在没有csvwrite
之类的名称的情况下执行此操作(因为您一次只讨论80个数字)。
另一个选项是使用matfile
,它允许您直接写入.mat文件中的变量。有关详细信息,请参阅help matfile
。