Sort 3d matrix according to another 3d matrix

1 回表示 (過去 30 日間)
Christian Maschner
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?

採用された回答

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 Center および File ExchangeLogical についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by