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

 Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 13 Dez. 2013
[ii,~,v] = find(Y);
out = accumarray(ii,v,[],@mean);

4 Kommentare

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

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

Thanks
Very smart idea
Jan
Jan am 26 Apr. 2018
Bearbeitet: Jan am 10 Mär. 2019
+1: Easy and efficient.
Excellent!!!! Thanks

Melden Sie sich an, um zu kommentieren.

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

Kategorien

Mehr zu Mathematics finden Sie in Hilfe-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