np.argpartition返回结果不符合预期?是函数错误还是我理解有误?
关于numpy.argpartition的分区结果解释
np.argpartition的核心作用不是完全排序,它只保证你指定索引位置对应的元素被放到正确的分区位置:该位置左侧的所有元素都小于等于它,右侧的所有元素都大于等于它——但左侧和右侧内部的元素顺序是不做有序保证的。
你的代码中使用np.argpartition(one_dim, 0),第二个参数0表示要将数组中**第0小的元素(即最小值)**放到结果数组的第0位。输入数组[2, 3, 1, 5, 4]的最小值是1,它原本的索引是2,所以argpartition会把这个元素放到第0位,剩下的元素只要满足大于等于1即可,它们的顺序不需要排序,因此出现3在2前面是完全符合函数设计逻辑的。
如果你需要得到完全排序的结果,应该使用np.argsort而非np.argpartition。修改后的代码示例:
import numpy as np one_dim = np.array([2, 3, 1, 5, 4]) sorted_indices = np.argsort(one_dim) print(f'Unpartitioned array: {one_dim}') print(f'Sorted array index: {sorted_indices}') print(f'Sorted array: {one_dim[sorted_indices]}')
运行输出:
Unpartitioned array: [2 3 1 5 4] Sorted array index: [2 0 1 4 3] Sorted array: [1 2 3 4 5]
核心区别总结:
np.argpartition是快速分区函数,用于定位第k小/大元素并完成基础分区,不保证整体有序np.argsort是完全排序函数,返回能让数组完全有序的索引
内容的提问来源于stack exchange,提问作者George Douglas
相关产品推荐
相关产品推荐

