How can I number each element of a matrix according to the corresponding ordered position, row by row?

3 visualizaciones (últimos 30 días)
For example, I have matrix A:
A = [9 15 1 16
15 9 1 16
1 6 2 4]
The sorted matrix is:
B= [1 9 15 16
1 9 15 16
1 2 4 6]
For each rows of A, I want to determine if each element corresponds to the first, second, third or fourth position, as follows:
A'= [2 3 1 4
3 2 1 4
1 4 2 3]
Thanks for help

Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 8 de En. de 2019
Editada: Andrei Bobrov el 8 de En. de 2019
[~,ii] = sort(A,2);
[~,out] = sort(ii,2)

Más respuestas (1)

madhan ravi
madhan ravi el 8 de En. de 2019
Editada: madhan ravi el 8 de En. de 2019
Note: Your A' doesn't correspond to the exact position. See https://www.mathworks.com/help/matlab/ref/sort.html#bt8nojg-1-I
A = [9 15 1 16 ;...
15 9 1 16 ;...
1 6 2 4 ];
Adash = [2 3 1 4 ;...
3 2 1 4 ;...
1 4 2 3];
[B,I]=sort(A,2) % B - sorted matrix , I - position of the original values --> see doc sort for explanation
Gives:
B =
1 9 15 16
1 9 15 16
1 2 4 6
I =
3 1 2 4
3 2 1 4
1 3 4 2
To compare A' you could do somethig like below:
Adash==I
Gives:
ans =
3×4 logical array
0 0 0 1
1 1 1 1
1 0 0 0
  1 comentario
Daniela Conforti
Daniela Conforti el 8 de En. de 2019
This is not what I want to achieve. I need the opposite corrispondence. If we have, for example, only the vector A= [9 15 1 16] the sorted vector is B= [1 9 15 16]; If we look at B, 9 is the second element, 15 is the third, 1 is the first and 16 is the forth. I want to obtain A' --> [2 3 1 4], but for all rows.

Iniciar sesión para comentar.

Categorías

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

Community Treasure Hunt

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

Start Hunting!

Translated by