How do you take the nanmean of a 3D matrix?

조회 수: 3 (최근 30일)
HollyA
HollyA 2018년 1월 26일
댓글: Walter Roberson 2018년 1월 26일
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
HollyA
HollyA 2018년 1월 26일
A full mean of the ten, similar to if I just did a mean mannually (add them up and divide by 10) but where some have NaN, to ignore that and continue to calculate the mean of the others as a number?
I hope this makes sense?
Adam
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
Walter Roberson 2018년 1월 26일
means_of_10 = nanmean( cat(4, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10), 4);
  댓글 수: 2
HollyA
HollyA 2018년 1월 26일
I tried this but it seemed to give me a very odd value and not quite work. Thank you for your answer though!
Walter Roberson
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 CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by