Numpy:np.sort() & np.argsort()

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]]
发布了52 篇原创文章 · 获赞 4 · 访问量 2122

猜你喜欢

转载自blog.csdn.net/qq_42191914/article/details/104738988
np