# mean value of a group of data with NaNs

1 vue (au cours des 30 derniers jours)
Leon le 27 Juin 2016
Commenté : the cyclist le 28 Juin 2016
I have a matrix A with the dimension of 12x360x180. It stores 12 values at each grid of the 360x180. Now I want to calculate the average value at each grid point. The problem is that there are unknown number of NaNs. Sometimes all 12 values are non-NaNs, sometimes all of them are NaNs, sometimes a portion of the 12 values are NaNs.
In this case, how do I estimate the mean values at each point of the grid? I know if there are no NaNs, the calculation is as easy as B = mean(A);
Thank you.
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Réponse acceptée

the cyclist le 27 Juin 2016
Modifié(e) : the cyclist le 27 Juin 2016
If you have the Statistics and Machine Learning Toolbox, you can use the nanmean function, which computes the mean while ignoring NaNs.
##### 1 commentaireAfficher -1 commentaires plus anciensMasquer -1 commentaires plus anciens
Leon le 27 Juin 2016
Modifié(e) : Leon le 27 Juin 2016
Many thanks! It works very well!
I happen to have Statistics toolbox on my version of the Matlab :-)

Connectez-vous pour commenter.

### Plus de réponses (2)

Chris Turnes le 27 Juin 2016
You can also just use the 'omitnan' option in "mean":
A = [1 0 0 1 NaN 1 NaN 0];
M = mean(A,'omitnan')
M =
0.5000
##### 3 commentairesAfficher 1 commentaire plus ancienMasquer 1 commentaire plus ancien
Chris Turnes le 27 Juin 2016
By the way, other related functions support this input argument as well: sum, var, std, median, and max and min (max and min have 'omitnan' as the default option). The mov* functions (if you have R2016a or newer) also support this argument.
the cyclist le 28 Juin 2016
I was unaware of this option! Very nice. Please accept my upvote.

Connectez-vous pour commenter.

the cyclist le 27 Juin 2016
If you do not have that Statistics and Machine Learning Toolbox, this should work:
notNan = not(isnan(A));
B = zeros(size(A));
B(notNan) = A(notNan);
sum(B)./sum(notNan)
You can do the sum over different dimensions, as required.
##### 1 commentaireAfficher -1 commentaires plus anciensMasquer -1 commentaires plus anciens
Leon le 27 Juin 2016
Modifié(e) : Leon le 27 Juin 2016
Brilliant! Good to have this alternative method for folks who do not have the Statistic toolbox and come to this page through search engine.

Connectez-vous pour commenter.

### Catégories

En savoir plus sur Descriptive Statistics dans Help Center et File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by