2011-07-26 28 views
24

Tengo una pregunta bastante simple acerca de cómo ordenar una matriz completa/recarray por una columna determinada. Por ejemplo, dada la matriz:Ordenar una matriz de python/recarray por la columna

import numpy as np 
data = np.array([[5,2], [4,1], [3,6]]) 

quisiera ordenar los datos de la primera columna para volver:

array([[3,6], [4,1], [5,2]]) 

Respuesta

40

Uso data[np.argsort(data[:, 0])] donde el 0 es el índice de la columna en la que se ordenan:

In [27]: import numpy as np 

In [28]: data = np.array([[5,2], [4,1], [3,6]]) 

In [29]: col = 0 

In [30]: data=data[np.argsort(data[:,col])] 
Out[30]: 
array([[3, 6], 
     [4, 1], 
     [5, 2]]) 
10

que busca operator.itemgetter

>>> from operator import itemgetter, attrgetter 

>>> sorted(student_tuples, key=itemgetter(2)) 
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] 

>>> sorted(student_objects, key=attrgetter('age')) 
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] 

es decir

In [7]: a 
Out[7]: [[5, 2], [4, 1], [3, 6]] 

In [8]: sorted(a, key=operator.itemgetter(0)) 
Out[8]: [[3, 6], [4, 1], [5, 2]] 
4

Para ordenar en la segunda columna de utilizar itemgetter

>>> from operator import itemgetter 
>>> data = [[5,2], [4,1], [3,6]] 
>>> sorted(data) 
[[3, 6], [4, 1], [5, 2]] 
>>> sorted(data,key=itemgetter(1)) 
[[4, 1], [5, 2], [3, 6]] 
>>> 
Cuestiones relacionadas