/ / Durchschnitt eines Blocks in einer 3D-Matrix - Arrays, Matlab, Matrix, mehrdimensionales Array

Durchschnitt einen Block in einer 3D-Matrix - Arrays, Matlab, Matrix, Multidimensional-Array

Ich habe ein 40 × 40 × 20-Array. Ich möchte einen Block von 5 in der 3. Dimension so mitteln, dass meine Ausgabematrix 40 × 40 × 4 beträgt.

Ich habe Folgendes versucht:

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

Antworten:

2 für die Antwort № 1

Sie können wie folgt vorgehen:

  1. Umformen in ein 4D-Array, sodass der Inhalt jedes Blocks entlang der 3. Dimension ausgerichtet ist und verschiedene Blöcke unterschiedlichen Positionen der 4. Dimension entsprechen;
  2. Durchschnitt entlang der 3. Dimension;
  3. Entfernen Sie die 3. Dimension, die jetzt ein Singleton ist, indem Sie sie bis zum Ende permutieren.

Code:

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