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 № 1Sie können wie folgt vorgehen:
- 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;
- Durchschnitt entlang der 3. Dimension;
- 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