Ordenamiento por columna de matrices en numpy

Ordenamiento con base en una columna
Considere la siguiente la matriz a:

In [2]: a = array([[1,2,3],[4,5,6],[0,0,1]])
Out[2]: 
array([[1, 2, 3],
       [4, 5, 6],
       [0, 0, 1]])

Suponga que se desea ordenar por alguna columna, por ejemplo, la segunda. Una forma simple consiste en tomar todos los elementos de dicha columna, ordenarlos con argsort() y usar el arreglo de índices para ordenar la matriz a completa:

In [6]: a[a[:,1].argsort()]
Out[6]: 
array([[0, 0, 1],
       [1, 2, 3],
       [4, 5, 6]])

Fuente: stackoverflow

Ordenar por una serie de columnas

Considere la siguiente matriz:

In [37]: a = np.array([(3, 2), (6, 2), (3, 6), (3, 4), (5, 3)])

In [38]: a
Out[38]: 
array([[3, 2],
       [6, 2],
       [3, 6],
       [3, 4],
       [5, 3]])

Suponga que se desea ordenar a por la segunda columna y luego por la primera. En este caso se puede utilizar lexsort. Esta función realiza un ordenamiento por múltiples columnas al devolver un arreglo de índices, idx. Recibe como parámetro una tupla de arreglos (columnas), (cn, ..., c2, c1). El ordenamiento se realizará primero por c1, luego por c2 y así hasta la columna cn.

# ordenar por (segunda columna, primera columna) 
In [39]: idx = lexsort((a[:,0], a[:,1]))

In [40]: a[idx]
Out[40]: 
array([[3, 2],
       [6, 2],
       [5, 3],
       [3, 4],
       [3, 6]])
# ordenar por (primera columna, segunda columna)
In [41]: idx = lexsort((a[:,1], a[:,0]))

In [42]: a[idx]
Out[42]: 
array([[3, 2],
       [3, 4],
       [3, 6],
       [5, 3],
       [6, 2]])

Fuente: stackoverflow

Un comentario en “Ordenamiento por columna de matrices en numpy

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s