Comparing multidimensional array with 2-D array

1 Ansicht (letzte 30 Tage)
Carol Clayson
Carol Clayson am 11 Apr. 2020
Kommentiert: Ameer Hamza am 11 Apr. 2020
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.

Akzeptierte Antwort

Ameer Hamza
Ameer Hamza am 11 Apr. 2020
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 Kommentare
Carol Clayson
Carol Clayson am 11 Apr. 2020
Thank you very much! The key line here was the mask = repmat . . .
My only question was why you made Aa
Ameer Hamza
Ameer Hamza am 11 Apr. 2020
In case, you need to use the value of A again later in code. If it is not required, then you can overwrite it.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by