对np.partition函数输出结果存在疑问,求相关运行原理解答
问题核心:对np.partition的kth参数作用理解偏差
np.partition执行的是不稳定的分划操作,而非全排序,不会自动将极值放到数组两端,它的输出仅满足和kth参数相关的唯一规则:
- 输出数组中,索引等于
kth的位置的元素,和数组全升序排序后对应索引的元素完全一致 - 所有小于该元素的值都会被放在它的左侧,所有大于该元素的值都会被放在它的右侧
- 左右两侧的元素顺序没有任何排序保证,可以是任意顺序
对应你的代码场景分析
你运行的代码为:
import numpy as np array = np.array([9, 2, 7, 4, 6, 3, 8, 1, 5]) print(np.partition(array, kth=0))
你指定的kth=0,函数仅需要保证索引0的位置是全数组最小值即可,你的输出第一个元素为1,已经完全符合逻辑。剩下位置的元素顺序不做任何约束,所以9出现在倒数第二位属于正常情况,不存在输出异常。
如果要实现你预期的「最大值9放在数组末尾」的效果,应该将kth设置为数组的最后一位索引:
print(np.partition(array, kth=-1))
此时函数会保证索引为-1(最后一位)的元素是全数组最大值9,仅满足这一条规则,其他位置的元素顺序依然不做约束。
内容的提问来源于stack exchange,提问作者Ido Ben Artzi
相关产品推荐
相关产品推荐

