Sort 3d matrix according to another 3d matrix
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Christian Maschner
le 18 Oct 2016
Modifié(e) : Massimo Zanetti
le 18 Oct 2016
Hi,
I have two 3d matrices (A and B) with the same size (m,n,o).
I want to sort matrix B along the third dimension based on the sort index of matrix A:
[~, idx] = sort(A,3,'descend')
If I use the following syntax it doesn't really work:
B = B(:,:,idx)
I get a (m,n,m*n*o) matrix instead of a sorted (m,n,o) matrix.
Any ideas?
0 commentaires
Réponse acceptée
Massimo Zanetti
le 18 Oct 2016
Modifié(e) : Massimo Zanetti
le 18 Oct 2016
According to Walter's comment, the previous solution was wrong. Here is a way to sort B given the sorted A along the 3-rd dimension:
m=3; n=4; o=2;
A=randi(9,m,n,o)
B(:,:,1)=[1,11,111,1111;2,22,222,2222;3,33,333,3333];
B(:,:,2)=[4,44,444,4444;5,55,555,5555;6,66,666,6666];
[~,ix] = sort(A,3,'descend');
[C,R,~]=meshgrid(1:n,1:m,1:o);
lix = sub2ind([m,n,o],R,C,ix);
B(lix)
Looking for a more general solution...
6 commentaires
Massimo Zanetti
le 18 Oct 2016
Modifié(e) : Massimo Zanetti
le 18 Oct 2016
That is exactly the solution I have finally run into to generalize the one above. However, it seems quite surprising that apparently there is no something like "built-in" solution...
Andrei Bobrov
le 18 Oct 2016
Modifié(e) : Andrei Bobrov
le 18 Oct 2016
[~, ii] = sort(A,3,'descend');
[m,n,o] = size(A);
B = B((ii-1)*m*n + reshape(1:m*n,m,[]));
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Shifting and Sorting Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!