【问题标题】:Saving all values generated by a for loop保存由 for 循环生成的所有值
【发布时间】:2014-11-15 13:05:05
【问题描述】:

所以,我是 MatLab 的新手,我正在尝试一些我确信这是可能的东西。但我不确定如何。

简而言之,这就是我要尝试的内容:我从矩阵 C 生成一串结果 (M)。矩阵 C 由 16 个单元格(4x4 单元格,每个单元格为 90x6)组成。从每个单元格中,我尝试计算平均值。这给了我平均值,但在每次迭代后重写 M:

for i=1:4;
for j=1:4;
M=mean2(C{i,j})
end
end

我需要的是一个 4x4 的矩阵,其中列出了所有 C 单元格的平均值,我该怎么做?

【问题讨论】:

    标签: matlab for-loop matrix mean


    【解决方案1】:
    M = zeros( 4 ); %// pre-allocate !!!
    for ii=1:4;
        for jj=1:4;
            M(ii,jj)=mean2(C{ii,jj})
        end
    end
    

    几点建议:

    1. 预分配 - 预分配循环中更新的数组是一种很好的做法。
      例如,请参阅this thread

    2. 最好not to use i and j as variable names in Matlab

    3. 在使用元胞数组时,您可能会发现 cellfun 是一个有用的工具:

      M = cellfun( @mean2, C );
      

    【讨论】:

    • iijj 做得很好,虽然我自己从不使用它们,但我总是忘记提醒人们不推荐使用它们。
    【解决方案2】:

    两种方式:

    1) 像@Shai 所说的那样预先分配:

    M = zeros( 4 );
    for ii=1:4;
        for jj=1:4;
            M(ii,jj)=mean2(C{ii,jj})
        end
    end
    

    2) 追加到数组中的前一个元素

    M = [];
    for i=1:4;
    for j=1:4;
    M=[M;mean2(C{i,j})];
    end
    end
    

    方法 1 肯定要好得多。但是想告诉你有两种方法..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多