在Matlab中存储循环的每次迭代

时间:2014-07-02 04:57:36

标签: matlab

我有一个2d矩阵(A = 80,42),我试图将它分成(80,1)42次并用不同的名字保存。即。

M_n1M_n2M_n3,...等(代表列数)

我试过

for i= 1:42
    M_n(i)=A(:,i)
end

它没有工作

如何在不覆盖结果的情况下执行此操作并将每次迭代保存在文件(.txt)中?

2 个答案:

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