赞
踩
numpy 中提供了丰富的数组排序方法,这里只列举最常用的函数和用法~
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']
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列排序
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]]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。