How to calculate the average without taking zeros values?

160 vues (au cours des 30 derniers jours)
afrya
afrya le 12 Déc 2013
Commenté : Dongpeng Lin le 3 Déc 2019
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

Andrei Bobrov
Andrei Bobrov le 13 Déc 2013
[ii,~,v] = find(Y);
out = accumarray(ii,v,[],@mean);
  4 commentaires
Guanting SU
Guanting SU le 10 Mar 2019
This worked out really well!
Dongpeng Lin
Dongpeng Lin le 3 Déc 2019
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
Jan
Jan le 26 Avr 2018
Modifié(e) : Jan le 10 Mar 2019
+1: Easy and efficient.
Alvaro Espinoza Hernández
Alvaro Espinoza Hernández le 13 Août 2018
Excellent!!!! Thanks

Connectez-vous pour commenter.


Mech Princess
Mech Princess le 5 Mar 2019
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

Simon
Simon le 12 Déc 2013
Hi!
for n = 1:size(Y, 1)
Average(n) = mean(Y(n, (Y(n, :) ~= 0)));
end

Catégories

En savoir plus sur Line Plots dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by