numpy np.partition()如何解释参数kth?

gjmwrych  于 2023-04-06  发布在  其他
关注(0)|答案(3)|浏览(125)

我试图弄清楚np.partition函数是如何工作的。

arr = np.array([5, 4, 1, 0, -1, -3, -4, 0])

如果我调用np.partition(arr, kth=2),我得到

np.array([-4, -3, -1, 0, 1, 4, 5, 0])

我希望,在分区之后,数组将拆分为元素 * 小于1 1 * 和元素 * 大于1 *。但是第二个零被放置在数组的最后一个位置,这不是分区后的正确位置。

dbf7pr2w

dbf7pr2w1#

documentation表示:
创建一个数组的副本,数组中的元素以这样的方式重新排列,即第k个位置的元素的值位于排序数组中的位置。所有小于第k个元素的元素都被移到该元素之前,所有等于或大于第k个元素的元素都被移到该元素之后。两个分区中元素的顺序未定义。
在你给予的例子中,你已经选择了排序列表的第2个元素(从零开始),它是-1,如果数组被排序,它似乎在正确的位置。

mznpcxlj

mznpcxlj2#

docs谈论“排序数组”。
np.partition首先对提供的数组中的元素进行排序(参见@norok2的注解)。在本例中,原始数组为:

arr = [ 5,  4,  1,  0, -1, -3, -4,  0]

排序后,我们有:

arr_sorted = [-4 -3 -1  0  0  1  4  5]

因此,调用np.partition(arr, kth=2)实际上将kth作为arr_sorted的位置2的元素,而不是arr。该元素被正确地选择为-1

sgtfey8w

sgtfey8w3#

我第一次看numpy.partition的官方文档的时候,也是按照OP的方式来解释它的意思的,所以看文档里给出的例子的时候,我也是一头雾水,但是又想不出自己的理解错在哪里,我google了一下,就到了这里。
考虑到混淆的情况经常发生,所以文档应该进行修改。我建议使用以下内容:
创建数组的副本,其中数组的元素按以下方式重新排列:新数组的第k个元素位于排序数组中的位置。所有小于第k个元素的元素都移动到该元素之前,所有大于该元素的元素都移动到该元素之后。两个分区中元素的顺序未定义。如果有其他元素等于第k个元素,则这些元素可能出现在第k个元素之前或之后。

相关问题