Numpy: argsort no funciona para matrices multidimensionales

Creado en 19 may. 2014  ·  12Comentarios  ·  Fuente: numpy/numpy

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é?

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)]

Todos 12 comentarios

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 ordenan a largo del eje especificado.
En otras palabras, a[index_array] produce un a 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

¿Fue útil esta página
0 / 5 - 0 calificaciones