【问题标题】:Average a block in a 3D matrix平均 3D 矩阵中的块
【发布时间】:2017-11-16 00:30:41
【问题描述】:

我有一个 40×40×20 的数组。我想在第三维平均一个 5 的块,这样我的输出矩阵是 40×40×4。

我尝试了以下方法:

out = zeros(size(data,1), size(data,2), size(data,3)/5);
c = 1;

for i = 1:5:size(data,3)
    out(:,:,c) = nanmean(data(:,:,i:i+5-1),3);
    c = c + 1;
end

【问题讨论】:

    标签: arrays matlab matrix multidimensional-array


    【解决方案1】:

    您可以按照以下方式进行:

    1. 重塑为 4D 数组,使每个块的内容沿 3 维对齐,不同的块对应不同的 4 维位置;
    2. 第三维的平均值;
    3. 通过将第 3 个维度(现在是一个单例)置换到末尾来移除它。

    代码:

    N = 5;                                                   % block size
    out = reshape(data, size(data,1), size(data,2), N, []);  % step 1
    out = nanmean(out, 3);                                   % step 2
    out = permute(out, [1 2 4 3]);                           % step 3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-24
      • 2017-11-03
      • 1970-01-01
      • 2013-06-16
      • 2018-12-02
      • 2011-10-21
      • 1970-01-01
      • 2019-08-16
      相关资源
      最近更新 更多