ordenar - Ordenando una matriz python/recarray por columna
ordenar matriz por columna c++ (4)
Tengo una pregunta bastante simple sobre cómo ordenar una matriz completa / recarray por una columna determinada. Por ejemplo, dado el conjunto:
import numpy as np
data = np.array([[5,2], [4,1], [3,6]])
Me gustaría ordenar los datos por la primera columna para regresar:
array([[3,6], [4,1], [5,2]])
Esto es algo complicado:
data[data[:,0].argsort()]
# data[:,n] -- get entire column of index n
# argsort() -- get the indices that would sort it
# data[data[:,n].argsort()] -- get data array sorted by n-th column
Encontré esta receta aquí:
Para ordenar en la segunda columna use 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]]
>>>
Use los data[np.argsort(data[:, 0])]
donde el 0
es el índice de la columna sobre el cual ordenar:
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]])
estás buscando 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]]