How to calculate the average without taking zeros values?

Hi, I have a large data list which has this form:
Y=
1 2 4 5 6 7 0 0 0 8 9 0 0 0 0... AVerage1=5.25
2 3 4 5 6 7 0 0 0 8 0 0 0 9 0... Average2=5.5
3 4 5 6 7 8 9 0 0 0 0 0 0 0 0... Average3=6
.
.
.
I would like to calculate the average of each row wihout taking zeros values.
Thanks in advance

 Réponse acceptée

[ii,~,v] = find(Y);
out = accumarray(ii,v,[],@mean);

4 commentaires

Thanks
Thank you sir! You have just saved us a lot of time in this school project.
This worked out really well!
Thank God

Connectez-vous pour commenter.

Plus de réponses (3)

Jos (10584)
Jos (10584) le 13 Déc 2013
Modifié(e) : Jos (10584) le 13 Déc 2013
No need of a loop:
A = [1 2 3 ; 10 0 30 ; 9 0 0]
rowMean = sum(A,2) ./ sum(A~=0,2)
Note that zeros do not contribute to sum(A) …

4 commentaires

Thanks
Very smart idea
Jan
Jan le 26 Avr 2018
Modifié(e) : Jan le 10 Mar 2019
+1: Easy and efficient.
Excellent!!!! Thanks

Connectez-vous pour commenter.

Hi!
for n = 1:size(Y, 1)
Average(n) = mean(Y(n, (Y(n, :) ~= 0)));
end
mean(nonzeros(X))
Y=[1 2 4 5 6 7 0 0 0 8 9 0 0 0 0; ...
2 3 4 5 6 7 0 0 0 8 0 0 0 9 0;...
3 4 5 6 7 8 9 0 0 0 0 0 0 0 0];
for i=1:3
mean(nonzeros(Y(i,:)))
end

Catégories

En savoir plus sur Graphics Performance dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by