How to calculate the average without taking zeros values?

164 Ansichten (letzte 30 Tage)
afrya
afrya am 12 Dez. 2013
Kommentiert: Dongpeng Lin am 3 Dez. 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

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 13 Dez. 2013
[ii,~,v] = find(Y);
out = accumarray(ii,v,[],@mean);
  4 Kommentare
Guanting SU
Guanting SU am 10 Mär. 2019
This worked out really well!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

Jos (10584)
Jos (10584) am 13 Dez. 2013
Bearbeitet: Jos (10584) am 13 Dez. 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 Kommentare
Jan
Jan am 26 Apr. 2018
Bearbeitet: Jan am 10 Mär. 2019
+1: Easy and efficient.

Melden Sie sich an, um zu kommentieren.


Mech Princess
Mech Princess am 5 Mär. 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 am 12 Dez. 2013
Hi!
for n = 1:size(Y, 1)
Average(n) = mean(Y(n, (Y(n, :) ~= 0)));
end

Kategorien

Mehr zu Line Plots finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by