how to calcuate mean with NaN

2 visualizaciones (últimos 30 días)
Peihong
Peihong el 12 de Sept. de 2013
Comentada: Esen S. el 21 de Abr. de 2020
Dear Friend,
There are two matrixs with the same size, there are some NaNs in each matrix. I want to calculate the mean of corresponding datapoints, which might contain NaN. for example, A(1,2)=NaN, B(1,2)=3, I need the average of the sum of 3+NaN divided by the effective number of data points, here is 1 since A(1,2) is NaN, to be 3. If A(2,2)=2,B(2,2)=5, I need the average to be (2+5)divided by 2, which equals 3.5 since neither A(2,2) and B(2,2) contains NaN. Is there a way to achieve this goal without using a for loop? thanks

Respuesta aceptada

Sven
Sven el 12 de Sept. de 2013
Editada: Sven el 12 de Sept. de 2013
If you have the Statistics Toolbox, just replace calls to mean() with calls to nanmean().
If you don't have it, you can do the same by downloading the File Exchange contribution nansuite
Here's an example:
A = reshape(1:4,2,2);
B = A + 10;
A([1 3]) = nan % Set some NaNs
B([1 2]) = nan
yourMean = nanmean(cat(3,A,B),3)
Which results in:
A =
NaN NaN
2 4
B =
NaN 13
NaN 14
yourMean =
NaN 13
2 9
  1 comentario
Peihong
Peihong el 12 de Sept. de 2013
Hi, Sven, thanks a lot. It's exactly what I need.

Iniciar sesión para comentar.

Más respuestas (2)

Jan
Jan el 12 de Sept. de 2013
Emulating NANMEAN without the statistics toolbox is easy:
index = isnan(X);
X(index) = 0;
M = sum(X, 2) ./ sum(index, 2);
  1 comentario
Esen S.
Esen S. el 21 de Abr. de 2020
I belive there is a tilde missing in the last line.
It should be M = sum(X, 2) ./ sum(~index, 2);

Iniciar sesión para comentar.


Shashank Prasanna
Shashank Prasanna el 12 de Sept. de 2013

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by