How to take the average of each column of a matrix without including a certain number

12 views (last 30 days)
I have a matrix that has 864 rows and 7 columns and is filled with positive numbers and zeros. I want to take the average of each of those columns. However when MATLAB is taking the averages, I dont want it to include the zeros in its calculations. Can this be done?

Accepted Answer

Joseph Cheng
Joseph Cheng on 16 Jul 2014
What you can do is do a quick substitution. if you know your matrix doesn't have any NaN (Not a number) then substitute the 0's for nan and then use the nanmean() which will exclude the NaNs from the average.
NonZeroAverages = nanmean(B);

More Answers (2)

Image Analyst
Image Analyst on 16 Jul 2014
If you don't have nanmean because you don't have the Finance or Statistics toolbox, you can simply do
columnMeans = sum(a, 1) ./ sum(a~=0);
where "a" is the name of your matrix. This sums up the values in each column, then divides it by the sum of the non-zero values in each column.

Sara on 16 Jul 2014
Let's call your array "a":
my_mean = zeros(size(a,2),1);
for i = 1:size(a,2)
d = a(:,i);d = d(d~=0);
my_mean(i) = mean(d);


Community Treasure Hunt

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

Start Hunting!

Translated by