Effacer les filtres
Effacer les filtres

Order columns of matrix based on other matrix

2 vues (au cours des 30 derniers jours)
link
link le 28 Jan 2021
Commenté : link le 28 Jan 2021
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?

Réponse acceptée

David Hill
David Hill le 28 Jan 2021
Result=B(A+[0:3:12]);
  2 commentaires
Adam Danz
Adam Danz le 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))]);
link
link le 28 Jan 2021
Thanks :) very neat

Connectez-vous pour commenter.

Plus de réponses (1)

Adam Danz
Adam Danz le 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
  1 commentaire
link
link le 28 Jan 2021
Thanks, also a good solution :).

Connectez-vous pour commenter.

Catégories

En savoir plus sur Shifting and Sorting Matrices dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by