numpy 中提供了丰富的数组排序方法,这里只列举最常用的函数和用法~
1. np.sort()
sort(a, axis=-1, kind=‘quicksort’, order=None):
Return a sorted copy of an array.
这里,axis指定排序的维度,默认-1指的是最后一个维度
a = np.array([
[1,5,9],
[4,2,6],
[3,3,7]
])
b = np.array(['b', 'a', 'c'])
print(np.sort(a))
print(np.sort(a, axis=0))
print(np.sort(a, axis=1))
print(np.sort(b))
[Out]:
[[1 5 9]
[2 4 6]
[3 3 7]]
[[1 2 6]
[3 3 7]
[4 5 9]]
[[1 5 9]
[2 4 6]
[3 3 7]]
['a' 'b' 'c']
2. np.argsort()
argsort(a, axis=-1, kind=‘quicksort’, order=None):
Returns the indices that would sort an array.
a = np.array([
[1,5,9],
[4,2,6],
[3,3,7]
])
b = np.array(['b', 'a', 'c'])
print(np.argsort(a, axis=-1))
print(np.argsort(a, axis=0))
print(np.argsort(a, axis=1))
print(np.argsort(b))
print(b[np.argsort(b)])
[Out]:
[[0 1 2]
[1 0 2]
[0 1 2]]
[[0 1 1]
[2 2 2]
[1 0 0]]
[[0 1 2]
[1 0 2]
[0 1 2]]
[1 0 2]
['a' 'b' 'c']
这里解释一下,argsort输出的是排序后当前位置所应该放的值的索引,比如 b=[‘b’, ‘a’, ‘c’],排序后第0个位置应该放’a’(索引为1),第1个位置应该放’b’(索引为0),第2个位置应该放’c’(索引为2),故最终输出为[1 0 2]~
另外,argosrt有个很方便的用法,比如我们希望对一个二维数组按某一列进行排序,就可以靠argsort完成,原理也很好理解~
a = np.array([
[1,5,9],
[4,2,6],
[3,3,7]
])
print(a[np.argsort(a[:, 1])]) # 按第1列排序
3. 其他
numpy中更多的排序方法,比如np.lexsort可用于对多个序列进行排序,可以参考菜鸟教程
另外,上文中排序结果都是升序排序,若想逆序,可以使用如下方法:
a = np.array([
[1,5,9],
[4,2,6],
[3,3,7]
])
# 方法一:在argsort中加负号
print(a[np.argsort(-a[:, 1])])
# 方法二:逆序索引
print(a[np.argsort(a[:, 1])][::-1])
[Out]:
[[1 5 9]
[3 3 7]
[4 2 6]]
[[1 5 9]
[3 3 7]
[4 2 6]]