# How to calculate the average without taking zeros values?

145 visualizzazioni (ultimi 30 giorni)
afrya il 12 Dic 2013
Commentato: Dongpeng Lin il 3 Dic 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.
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Risposta accettata

Andrei Bobrov il 13 Dic 2013
[ii,~,v] = find(Y);
out = accumarray(ii,v,[],@mean);
##### 4 CommentiMostra 2 commenti meno recentiNascondi 2 commenti meno recenti
Guanting SU il 10 Mar 2019
This worked out really well!
Dongpeng Lin il 3 Dic 2019
Thank God

Accedi per commentare.

### Più risposte (3)

Jos (10584) il 13 Dic 2013
Modificato: Jos (10584) il 13 Dic 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 CommentiMostra 2 commenti meno recentiNascondi 2 commenti meno recenti
Jan il 26 Apr 2018
Modificato: Jan il 10 Mar 2019
+1: Easy and efficient.
Excellent!!!! Thanks

Accedi per commentare.

Simon il 12 Dic 2013
Hi!
for n = 1:size(Y, 1)
Average(n) = mean(Y(n, (Y(n, :) ~= 0)));
end
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
afrya il 13 Dic 2013

Accedi per commentare.

Mech Princess il 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
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Categorie

Scopri di più su Line Plots in Help Center e File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by