# Mean of matrix subarrays without using a loop.

1 vue (au cours des 30 derniers jours)
Santos García Rosado le 16 Mar 2021
Hi Mathworks community.
I'm trying to calculate the mean value of my matrix subarrays without taking the zero values into account. I know how to do it using a loop, but in this case I'd like to avoid it.
The code should take matrix A:
A = [1 0 3 5 0 7; 0 2 6 0 8 0; 3 5 0 0 2 0]
And calculate the mean value of the subarray for each row in steps of 3. So the output should look like:
Out = [2 6; 4 8; 4 2]
I'm trying to improve this code, since I'll be working with much bigger matrixes and I won't be able to do it manually:
Out = mean(nonzeros(A(1,1:3)));
Any help would be much appreciated.
Santos
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Réponse acceptée

Stephen23 le 16 Mar 2021
Modifié(e) : Stephen23 le 16 Mar 2021
A = [1 0 3 5 0 7; 0 2 6 0 8 0; 3 5 0 0 2 0]
A = 3×6
1 0 3 5 0 7 0 2 6 0 8 0 3 5 0 0 2 0
B = reshape(A.',3,[]);
B(B==0) = NaN;
C = reshape(mean(B,1,'omitnan'),[],size(A,1)).'
C = 3×2
2 6 4 8 4 2
Or
F = @(s)mean(nonzeros(s.data));
C = blockproc(A,[1,3],F) % requires the Image Toolbox.
C = 3×2
2 6 4 8 4 2
##### 1 commentaireAfficher -1 commentaires plus anciensMasquer -1 commentaires plus anciens
Santos García Rosado le 16 Mar 2021
Nice and clean code. Thank you Stephen!

Connectez-vous pour commenter.

### Catégories

En savoir plus sur Resizing and Reshaping Matrices dans Help Center et File Exchange

R2020b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by