Sorting a Matrix using Indices from another matrix !
13 ビュー (過去 30 日間)
古いコメントを表示
Hello
I have a pretty simple question !
I have a matrix A (lets assume has a size 5 x 5) and I have another matrix of same size (5 x 5) called IDX that contains the values for sorting A in a colum-wise manner.
So how can I easily sort each column of A using matrix IDX without using a for loop or extracting each column of IDX as an individual vector ?
Thank you in advance !
2 件のコメント
the cyclist
2013 年 9 月 13 日
This would be much easier to answer if you gave examples of the two matrices, and the expected result.
採用された回答
Azzi Abdelmalek
2013 年 9 月 13 日
[m,n]=size(A);
A=A(sub2ind([m n],idx,repmat(1:n,m,1)))
5 件のコメント
Azzi Abdelmalek
2013 年 9 月 13 日
idx =[4 1 6;5 2 5;6 3 4;3 6 3;2 5 2;1 4 1];
A = [1:6;7:12;13:18]';
idx1=idx % indicate line index
4 1 6
5 2 5
6 3 4
3 6 3
2 5 2
1 4 1
[m,n]=size(A);
idx2=repmat(1:n,m,1) %indicate column index
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
idx=sub2ind([m n],idx1,idx2) % to get linear index
4 7 18
5 8 17
6 9 16
3 12 15
2 11 14
1 10 13
A=A(idx)
その他の回答 (2 件)
Image Analyst
2013 年 9 月 13 日
Try this:
% Create random sample data so it will be easy
% for us to see if the sorting worked.
A = randi(9, [6,3])
IDX = [4 5 6 3 2 1;
1 2 3 6 5 4;
6 5 4 3 2 1]'
[rows, columns] = size(A)
% Sort columns of A according to the same column of IDX
for col = 1 : columns
A(:,col) = A(IDX(:,col), col);
end
% Print out to command window.
A
In the command window:
A =
7 7 7
3 8 7
9 2 3
1 5 7
4 5 6
4 6 2
IDX =
4 1 6
5 2 5
6 3 4
3 6 3
2 5 2
1 4 1
rows =
6
columns =
3
A =
1 7 2
4 8 6
4 2 7
9 6 3
3 5 7
7 5 7
0 件のコメント
Azzi Abdelmalek
2013 年 9 月 13 日
編集済み: Azzi Abdelmalek
2013 年 9 月 13 日
Edit2
A = [1 1 1 0 0 0; 0 0 0 1 1 1; 0 1 0 1 0 1]'
idx= [4 5 6 3 2 1; 1 2 3 6 5 4; 6 5 4 3 2 1]'
[m,n]=size(A);
idx=bsxfun(@plus,idx,(0:m:(n-1)*m))
A=A(idx)
参考
カテゴリ
Help Center および File Exchange で Shifting and Sorting Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!