/ / MATLAB: Encuentre la matriz de permutación que corresponde a una operación de clasificación - matlab, clasificación, permutación

MATLAB: Encuentra la matriz de permutación que corresponde a una operación de clasificación - matlab, sorting, permutation

Supongamos que tengo una matriz diagonal cuyo no ceroElementos que me gustaría ordenar de menor a mayor, de modo que el elemento superior izquierdo sea la diagonal más grande y el elemento inferior izquierdo sea el más pequeño. ¿Existe una manera eficiente de encontrar la matriz de permutación que corresponda a los resultados de cualquier operación?

Esto puede simplificarse aún más buscando una matriz de permutación para permutar las filas de un vector de columna de tal manera que estén ordenadas por magnitud, pero aún no conozco una buena solución.

Respuestas

1 para la respuesta № 1

Extraiga las entradas diagonales, encuentre los índices correspondientes para clasificarlos y utilice esos índices para reorganizar una matriz de identidad en una matriz de permutación.

%matrix size
N = 5;

%random diagonal matrix
d=rand(N,1);
D = diag(d);

%extract the diagonal entries of D and sort them
[~,I]=sort(diag(D));

%generate the permutation matrix
P = eye(size(D));
P = P(I,:)

%Verify answer P*D gives the sorted matrix
P*D

1 para la respuesta № 2

Utiliza las dos salidas de sort:

>> A = diag([8 3 4])
A =
8     0     0
0     3     0
0     0     4

>> [sorted, sorting] = sort(diag(A))
sorted =
3
4
8

sorting =
2
3
1