Sorting and indexing multidimensional arrays
8 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Shing Bo Peh
el 12 de Nov. de 2020
Editada: Shing Bo Peh
el 12 de Nov. de 2020
I would like to clarify if indexing is supported for multidimensional arrays.
For example, consider the code below.
According to the help page, the line B2 = A(I) a recover the sorted array.
However, from MATLAB Online R2020b the code snippet produces array full of ones as the result for B2.
A(:,:,1) = 1*ones(3);
A(:,:,2) = 2*ones(3);
A(:,:,3) = 3*ones(3);
A(:,:,4) = 4*ones(3);
[B,I] = sort(A,3,'descend');
B2 = A(I);
2 comentarios
Stephen23
el 12 de Nov. de 2020
"According to the help page, the line B2 = A(I) a recover the sorted array."
Are your data in a vector? (hint: no).
Respuesta aceptada
Walter Roberson
el 12 de Nov. de 2020
See https://www.mathworks.com/matlabcentral/answers/645463-help-required-for-sorting#answer_542268 -- I just happened to write up an explanation for someone of the same basic problem.
You would need to expand what I wrote there into the third dimension. You would want to change the repmat() that I show there into something more like
[ROWIDX, COLIDX] = ndgrid(1:size(A,1), 1:size(A,2));
B2 = sub2ind(size(A), ROWIDX, COLIDX, sortidx);
This is untested; you might need to use meshgrid() instead of ndgrid()
3 comentarios
Más respuestas (1)
Bruno Luong
el 12 de Nov. de 2020
Editada: Bruno Luong
el 12 de Nov. de 2020
[B,I] = sort(A,3,'descend');
I is ndarray same size as A and B, values is 1:size(A,3) such that for any i,j
A(i,j,I(i,j,:))
is equal to
B(i,j,:)
(Both are then sorted in descending order)
0 comentarios
Ver también
Categorías
Más información sobre Shifting and Sorting Matrices 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!