Numpy中的排序相关操作sort,argsort,partition,argpartition

今天遇见的程序里某一行需要用到numpy中的argpartition()函数,顺便复习一下numpy中的排序相关的函数

1.np.sort()

np.sort(a, axis=-1, kind='quicksort', order=None)
参数 参数说明
a 待排序数组array
axis=-1 默认按最后一个轴进行排序,axis=0,按行进行排序,axis=1,按列进行排序,简单示意图如下
kind 具体采用的排序方法,有{‘quicksort’, ‘mergesort’, ‘heapsort’}可供选择一般默认即可
order 一个字符串或列表,可以按照某个属性进行排序,当a是一个定义了字段的数组时有用

Numpy中排序操作partition,argpartition,sort,argsort

具体示例:
Numpy中排序操作partition,argpartition,sort,argsort
关于order参数,创建如下结构数组:
Numpy中排序操作partition,argpartition,sort,argsort
按照指定属性进行排序:
Numpy中排序操作partition,argpartition,sort,argsort
Numpy中排序操作partition,argpartition,sort,argsort

2.np.argsort()

与sort基本一致,不过不是返回的排序完成后的元素数组,而是排序完成后相应元素对应的索引数组
Numpy中排序操作partition,argpartition,sort,argsort
元素2对应索引0,元素3对应索引3等等
Numpy中排序操作partition,argpartition,sort,argsort

3.np.partition()

要了解argpartition()方法最好先了解partition(),因为argpartition()只不过是在partition()的基础上返回排序完成数组的索引号罢了

partition(a, kth, axis=-1, kind='introselect', order=None)
参数 参数说明
a 待排序数组array
kth 数组元素中从小到大的第k个值将在处于其最终排序位置k(下面例子具体说明)
axis=-1 默认按最后一个轴进行排序
kind 具体采用的排序方法,一般默认即可
order 一个字符串或列表,可以按照某个属性进行排序,当a是一个定义了字段的数组时有用

具体例子

Numpy中排序操作partition,argpartition,sort,argsort
表示数组a中第2小的元素即元素2位于排序完成数组b第二个位置上,即索引b[1]处,然后小于该元素的位于该元素左边,大于该元素的位于右边,左右两边没有特别的排序要求,只要求左边小于该元素,右边大于该元素即可

Numpy中排序操作partition,argpartition,sort,argsort
表示数组a中第4小的元素即元素6位于排序完成数组b第四个位置上,即索引b[3]

Numpy中排序操作partition,argpartition,sort,argsort
kth也可以是负数
表示数组a中第2大的元素即元素8位于排序完成数组b倒数第2个位置上,即索引b[-2]
当然,这有个什么用啊?用处之一就是如果我们有一个非常大的数组,假如我们想要找到其中最大的10个数,怎么办呢,我们可以用sort函数,然后排序完成后取出来,但是数组太大时这一方法比较耗时,所以我们可以采用partition函数,partition只对数组进行一遍排序,找到k位置的数即可,而对k位置左右的排序不关心,工作量少意味着其效率快
假如我们想找到a中的最大3个元素,我们该怎么操作呢?
Numpy中排序操作partition,argpartition,sort,argsort
相应找到最小的3个元素也很简单:
Numpy中排序操作partition,argpartition,sort,argsort

4.argpartition()

与partition()类似,不过返回的不是分区排序好的元素数组,而是排序完成的元素索引数组
如:Numpy中排序操作partition,argpartition,sort,argsort
其中元素3对应索引4,元素4对应索引5,元素5对应索引1,等等

相关文章: