How do you take the nanmean of a 3D matrix?
3 次查看(过去 30 天)
显示 更早的评论
I have ten matrices that I want to average, but some have NaNs in them. They are of the dimension 64x128x12. How do I get the mean of the ten without including NaN in the calculation and still maintaining the dimensions of 64x128x12?
I have tried nanmean and nanmean2 to no luck.
Thank you!
4 个评论
Adam
2018-1-26
Well, 'mean of the ten' could still mean take the mean value of all data in all 10 matrices, but from your clarification I assume you mean the end result should be 64x128x12 too.
Walters answer of stacking them into a 4-d 64x128x12x10 matrix and taking the nanmean (or simply 'mean' with an 'omitnan' flag which is the same thing anyway) seems fine to me...
回答(1 个)
Walter Roberson
2018-1-26
means_of_10 = nanmean( cat(4, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10), 4);
2 个评论
Walter Roberson
2018-1-26
To confirm: if there was (say) 2 nan out of 10, you would want the others totaled and divide by (10-2) = 8? Or would you want to divide by 10?
You can code more explicitly as:
temp = cat(4, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10);
nans = isnan(temp);
temp(nans) = 0;
means_of_10 = sum(temp, 4) ./ (size(temp,4) - sum(nans,4));
If this does not give you the results you expect then you should check your values more closely.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!