considere el siguiente código:
a = np.random.random ([5,5])
ind = np.argsort (a, eje = 1)
a_sorted = a [ind]
np.sort (a, eje = 1)
ahora a_sorted y a deberían estar ordenados a lo largo del eje 1. Sin embargo, ni siquiera las formas son idénticas. a sigue siendo de (5,5) mientras que a_sorted es (5,5,5). Si este es el comportamiento previsto, ¿alguien puede decirme por qué?
argsort()
funciona bien, pero la indexación no funciona de la forma esperada.
http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#advanced -indexing
Prueba esto:
a = np.random.random([5,5])
i = np.arange(len(a))[:, np.newaxis]
j = np.argsort(a, axis=1)
a_sorted = a[i, j]
np.sort(a, axis=1)
Estaba confundido de la misma manera. La documentación establece específicamente,
Devoluciones
matriz_índice: ndarray, int
Matriz de índices que ordenana
largo del eje especificado.
En otras palabras,a[index_array]
produce una
ordenado.
Lo cual solo se aplica a una matriz 1D. ¿Debería ampliarse la documentación para especificar que este no es el caso de las matrices ND?
@lzkelley Sí, un parche para mejorar la documentación sería muy bienvenido.
@shoyer genial, haré un PR y actualizaré
Sería bueno si hubiera un ejemplo de cómo usar realmente la salida para ordenar la matriz ND.
También sería bueno si hubiera una solución más legible que a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]
Tal vez @seberg podría convertirlo en una de sus funciones de indexación.
No creo que se ajuste a la indexación de manera muy obvia, una función de selección o algo así probablemente sea una coincidencia más fácil.
+1 para una nueva función.
¿No se utilizará todo el propósito de argsort
(en oposición a sort
) para la indexación?
argsort
proporciona los índices para ordenar a lo largo de un eje, pero en realidad ordenar a lo largo de ese eje usando los índices parece innecesariamente detallado. A menos que haya una forma más sencilla de la que no tenga conocimiento.
una función de selección o algo así es probablemente una coincidencia más fácil.
Este es el # 8708
Comentario más útil
Sería bueno si hubiera un ejemplo de cómo usar realmente la salida para ordenar la matriz ND.
También sería bueno si hubiera una solución más legible que
a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]