Sort 3d matrix according to another 3d matrix
1 回表示 (過去 30 日間)
古いコメントを表示
Christian Maschner
2016 年 10 月 18 日
編集済み: Massimo Zanetti
2016 年 10 月 18 日
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 件のコメント
採用された回答
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
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
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 Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!