Comparing multidimensional array with 2-D array

1 次查看(过去 30 天)
I have an array with indices A(1388, 56, 720). I want to do a nanmean along the third dimension. If that was all, B = nanmean(A,3) would be fine. However, I actually only want to get a nanmean when the number of non-nan values in the third dimension are greater than 360 (or other number). I would like to avoid doing some kind of series of if statements going element by element through A.
I can find the number of non-nan elements easily at each point in the first two dimensions by:
C = sum(~isnan(A),3);
However, I can't figure out how to make that into something easily useful. For instance,
D = nanmean(A(C > 360),3);
produces a vector in D of less than 1388*56 points with no indication of where these should be in the A(1388,56) array.
Any help to make something out of this would be very much appreciated.

采纳的回答

Ameer Hamza
Ameer Hamza 2020-4-11
Something like this
A = rand(1388, 56, 720);
A(A<0.5) = nan; % making 50% elements nan
Aa = A; % make a copy of A
mask = repmat(sum(isnan(A), 3) < 360, 1, 1, size(A,3));
A(mask) = nan; % setting all the 3rd column values to nan so that nanmean ignore it.
B = nanmean(A,3); % nan indicate that this row column were ignored in 3rd dimension
B(isnan(B)) = 0;
  2 个评论
Carol Clayson
Carol Clayson 2020-4-11
Thank you very much! The key line here was the mask = repmat . . .
My only question was why you made Aa
Ameer Hamza
Ameer Hamza 2020-4-11
In case, you need to use the value of A again later in code. If it is not required, then you can overwrite it.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Array Geometries and Analysis 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by