Use indices from MAX(A,[],dim) to get sum over only part of another array B

2 visualizaciones (últimos 30 días)
Suppose A and B are X x Y x Z arrays, with the 3rd dimension being vertical height. I want to determine where, vertically, A falls below a threshold. Then, I want to do a vertical sum in B ONLY below that height. Currently:
X = 14; Y = 28; Z = 10;
A=rand(X,Y,Z); B=rand(X,Y,Z);
threshold=mean(A(:));
[~,I] = max(A < threshold ,[],3);
I = squeeze(I); % I now has dimensions X x Y
for i = 1:size(I,1)
for j = 1:size(I,2)
result(i,j) = nansum(B(i,j,1:I(i,j)),3);
end
end
The loop is extremely slow when this method is implemented for very large datasets. There must be a way to vectorize this code! Thank you in advance.
Edit: the process for finding I works well. It is only the loop that needs to be improved.
  2 comentarios
Azzi Abdelmalek
Azzi Abdelmalek el 21 de Mzo. de 2013
You said I size is X x Y . What is size(I,3)?
Eowyn Baughman
Eowyn Baughman el 21 de Mzo. de 2013
Sorry. I was neglecting to mention my actual data has a time dimension. I'll edit the question to be more accurate to the dummy example.

Iniciar sesión para comentar.

Respuestas (0)

Categorías

Más información sobre Logical en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by