Sorting a Matrix using Indices from another matrix !
14 views (last 30 days)
Show older comments
Dimitris M
on 13 Sep 2013
Commented: Aaron Thode
on 31 Jul 2018
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 Comments
the cyclist
on 13 Sep 2013
This would be much easier to answer if you gave examples of the two matrices, and the expected result.
Accepted Answer
Azzi Abdelmalek
on 13 Sep 2013
[m,n]=size(A);
A=A(sub2ind([m n],idx,repmat(1:n,m,1)))
5 Comments
Azzi Abdelmalek
on 13 Sep 2013
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)
More Answers (2)
Image Analyst
on 13 Sep 2013
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 Comments
Azzi Abdelmalek
on 13 Sep 2013
Edited: Azzi Abdelmalek
on 13 Sep 2013
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)
See Also
Categories
Find more on Shifting and Sorting Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!