版权声明:转载请注明作者(独孤尚良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——著