mean value of a group of data with NaNs
1 回表示 (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
the cyclist
2016 年 6 月 27 日
編集済み: the cyclist
2016 年 6 月 27 日
If you have the Statistics and Machine Learning Toolbox, you can use the nanmean function, which computes the mean while ignoring NaNs.
その他の回答 (2 件)
Chris Turnes
2016 年 6 月 27 日
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 件のコメント
Chris Turnes
2016 年 6 月 27 日
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
2016 年 6 月 27 日
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.
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!