像表格一样排序numpy数组
我有一个列表
[[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]]
任何帮助都将非常感谢!
4 个回答
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])]
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]])
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]])