Order columns of matrix based on other matrix

1 visualización (últimos 30 días)
link
link el 28 de En. de 2021
Comentada: link el 28 de En. de 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?

Respuesta aceptada

David Hill
David Hill el 28 de En. de 2021
Result=B(A+[0:3:12]);
  2 comentarios
Adam Danz
Adam Danz el 28 de En. de 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 el 28 de En. de 2021
Thanks :) very neat

Iniciar sesión para comentar.

Más respuestas (1)

Adam Danz
Adam Danz el 28 de En. de 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

Categorías

Más información sobre Shifting and Sorting Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by