Sort 3d matrix according to another 3d matrix

1 次查看(过去 30 天)
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?

采纳的回答

Massimo Zanetti
Massimo Zanetti 2016-10-18
编辑:Massimo Zanetti 2016-10-18
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 个评论
Massimo Zanetti
Massimo Zanetti 2016-10-18
编辑:Massimo Zanetti 2016-10-18
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
Andrei Bobrov 2016-10-18
编辑:Andrei Bobrov 2016-10-18
[~, ii] = sort(A,3,'descend');
[m,n,o] = size(A);
B = B((ii-1)*m*n + reshape(1:m*n,m,[]));

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Shifting and Sorting Matrices 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by