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!