2017-11-16 7 views
1

私は40×40×20のアレイを持っています。私は、出力マトリックスが40×40×4となるように、3次元の5ブロックを平均したいと思います。3Dマトリックスの平均ブロック

Iは、以下を試してみました:

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 

答えて

2

次のように進行することができる:

  1. リシェイプを4Dアレイ内の各ブロックの内容は、3次元に沿って整列され、異なるブロックが異なる4に対応するように - 次元位置;
  2. 3次元に沿った平均。
  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