Clear Filters
Clear Filters

Order columns of matrix based on other matrix

2 views (last 30 days)
So in one matrix A I have the order of the elements
A = 3 1 3 1 3
2 2 2 2 1
1 3 1 3 2
and in the other matrix B are the actual values
B = 1 5 5 1 7
2 6 7 2 4
4 8 8 6 5
How can I use the columns of A to order the columns of B?
Result = 4 5 8 1 5
2 6 7 2 7
1 8 5 6 4
So e.g. for the 5th column: 5 becomes the first value, 7 the first and 4 the third.
result(1,5) = B(A(1,5), 5); % A(1,5) = 3
result(2,5) = B(A(2,5), 5); % A(2,5) = 1
result(3,5) = B(A(3,5), 5); % A(3,5) = 2
Can I do this without using a loop?

Accepted Answer

David Hill
David Hill on 28 Jan 2021
Result=B(A+[0:3:12]);
  2 Comments
Adam Danz
Adam Danz on 28 Jan 2021
Nice idea. To make it work for all matrix sizes,
Result=B(A+[0:size(A,1):numel(A(:,1:end-1))]);

Sign in to comment.

More Answers (1)

Adam Danz
Adam Danz on 28 Jan 2021
Secret ingredient: sub2ind
A = [3 1 3 1 3
2 2 2 2 1
1 3 1 3 2 ];
B = [1 5 5 1 7
2 6 7 2 4
4 8 8 6 5 ];
cols = (1:size(A,2)).*ones(size(A,1),1);
ind = sub2ind(size(B),A,cols);
Result = B(ind)
Result = 3×5
4 5 8 1 5 2 6 7 2 7 1 8 5 6 4

Categories

Find more on Shifting and Sorting Matrices in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!