用于数组分区的numpy.partition()函数的运行原理

版权声明:转载请注明作者(独孤尚良dugushangliang)出处:https://blog.csdn.net/dugushangliang/article/details/96134435

 

本文论述:numpy.partition(a, kth[, axis, kind, order])

这个函数是指定一个数,通过这个数对数组进行分区。上面的a是数组,kth就是指定的数,这个数是什么意思呢?

如上图所示,最下面显示了a这个数组,上面是kth依次取0/1/2/3/4/5/6的结果。通过归纳总结,得出:

partition函数先对数组a进行排序,kth这个值指的是排序后的索引。如kth取0则表示是数组中最小值。因为是索引,所以这个数值不能大于等于这个数组的长度。以kth取2为例,partition函数对数组排序后得到第3小的数5,那么在新的数组中,5前面的都是比它小的,后面的都是比它大的。这里需要注意的是:这个函数只是分组,并没有完全排序,所以比5大的那些数字没有顺序,比5小的同样。

如果分多组怎么办呢?kth就用列表或元组来实现。列表或元组中的数字,依然是从小到大排序后的索引,所以依然要注意索引超域的问题,即不能大于等于数组的长度。

那么列表或元组中的大小顺序有要求吗?

严格来说:kth应该是单调递增的,但如果不是单调递增的也不会报错,那结果会是怎样的呢?

根据上图,可以推断:partition函数先对数组排序,得到排序数组[2,4,5,6,7,8],先取kth的第一个值,如(1,5,3)中的1作索引,取到排序数组中索引为1的值4,把原数组中小于4的放到输出数组的前面,这一步,得到了[2,4,…]。接着,取kth第二个值5作为索引,取到排序数组的7,再把比7小的放到输出数组,这一步得到了[2,4,5,6,7,…]。接着取第三个值3,因为索引已经到5了,所以这个3被忽略了。如果后面有索引比5大的,会继续操作,不然就跳过,直到最后。最后会把数组中剩下的数字放到输出数组的后面,所以最终得到了上图所示的结果。

 

独孤尚良dugushangliang——著

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值