Abordar la matriz Matlab con Index-matrix

Estoy usando el comando [A,idx] = sort(A), que ordena la matriz A en columnas, que es lo que quiero. los idx La matriz muestra cómo se ha ordenado cada columna de A. Ahora si intento acceder B(idx) MATLAB asume que estoy haciendo referencia B de manera absoluta. Sin embargo, esto no es lo que quiero, quiero las columnas de B ordenados con el mismo esquema A fue ordenado con.

Por lo tanto, estoy buscando un comando que indexe una matriz en columnas. Por supuesto, puedo hacer esto fácilmente con un bucle, pero parece una solución bastante pobre. También se me ocurrió esta solución, pero no es muy bonita

idx = idx+repmat(0:size(idx,1):size(idx,2)*size(idx,1)-1,size(idx,1),1)

Gracias de antemano.

preguntado el 08 de noviembre de 11 a las 13:11

1 Respuestas

Considere lo siguiente:

A = randi([1 10],[5 4]);
[AA,idx] = sort(A);

Tu solución no es mala, podrías mejorarla un poco reemplazando la llamada REPMAT con BSXFUN:

idx = bsxfun(@plus, idx, 0:size(idx,1):numel(idx)-1);
isequal(AA,A(idx))

Otra alternativa es convertir a índices lineales usando SUB2IND:

idx = sub2ind(size(idx), idx, repmat(1:size(idx,2),size(idx,1),1));
isequal(AA,A(idx))

respondido 08 nov., 11:17

gracias, creo que usaré el enfoque bsxfun. Me sorprende que matlab no tenga una función incorporada para esto. - foges

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.