我有一个清单
[[0, 3], [5, 1], [2, 1], [4, 5]]
我使用numpy.array创建了一个数组:
[[0 3]
[5 1]
[2 1]
[4 5]]
如何将其排序为桌子?特别是,我希望按升序排序第二列,然后通过按升序排序第一列来解决任何关系。因此,我希望:
[[2 1]
[5 1]
[0 3]
[4 5]]
非常感谢任何帮助!
答案 0 :(得分:9)
请参阅http://docs.scipy.org/doc/numpy/reference/generated/numpy.lexsort.html#numpy.lexsort
特别是在您的情况下,
import numpy as np
x = np.array([[0,3],[5,1],[2,1],[4,5]])
x[np.lexsort((x[:,0],x[:,1]))]
输出
array([[2,1],[5,1],[0,3],[4,5]])
答案 1 :(得分:4)
您可以使用numpy.lexsort()
:
>>> a = numpy.array([[0, 3], [5, 1], [2, 1], [4, 5]])
>>> a[numpy.lexsort(a.T)]
array([[2, 1],
[5, 1],
[0, 3],
[4, 5]])
答案 2 :(得分:2)
另一种方法 - 切出你想要的数据位,使用argsort获取排序索引,然后使用结果来切割原始数组:
a = np.array([[0, 3], [5, 1], [2, 1], [4, 5]])
subarray = a[:,1] # 3,1,1,5
indices = np.argsort(subarray) # Returns array([1,2,0,3])
result = a[indices]
或者,一气呵成:
a[np.argsort(a[:,1])]
答案 3 :(得分:1)
如果您只想使用单个列进行排序(例如,第二列),您可以执行以下操作:
from operator import itemgetter
a = [[0, 3], [5, 1], [2, 1], [4, 5]]
a_sorted = sorted(a, key=itemgetter(1))
如果有多个密钥,请使用其他答案中指出的numpy.lexsort()。