Comparing multidimensional array with 2-D array

2 visualizaciones (últimos 30 días)
Carol Clayson
Carol Clayson el 11 de Abr. de 2020
Comentada: Ameer Hamza el 11 de Abr. de 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.

Respuesta aceptada

Ameer Hamza
Ameer Hamza el 11 de Abr. de 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 comentarios
Carol Clayson
Carol Clayson el 11 de Abr. de 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 el 11 de Abr. de 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.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Array Geometries and Analysis en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by