2011-07-26 10 views
24

Tôi có một câu hỏi khá đơn giản về cách sắp xếp toàn bộ mảng/recarray bởi một cột nhất định. Ví dụ, với các mảng:Sắp xếp một mảng python/recarray theo cột

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

Tôi muốn sắp xếp dữ liệu theo cột đầu tiên quay trở lại:

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

Trả lời

40

Sử dụng data[np.argsort(data[:, 0])] nơi 0 là chỉ số cột mà trên đó để sắp xếp:

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

bạn đang tìm kiếm 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)] 

tức

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

Để sắp xếp trên cột thứ hai sử dụng 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]] 
>>>