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

问题描述 投票:0回答:3

我想弄清楚

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])

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

python arrays sorting numpy
3个回答
12
投票

文档说:

创建数组的副本,并重新排列其元素: 第 k 个位置的元素的值位于其应在的位置 一个排序的数组。所有小于第 k 个元素的元素都被移动到前面 该元素以及所有相等或更大的元素都移到它后面。的排序 两个分区中的元素未定义。

在您给出的示例中,您选择了排序列表的第 2 个元素(从零开始),即 -1,如果数组已排序,它似乎位于正确的位置。


6
投票

文档谈论“排序数组”。

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
作为
2
的位置
arr_sorted
中的元素,而不是
arr
。该元素被正确选择为
-1


2
投票

当我第一次阅读numpy.partition的官方文档时,我也按照OP的方式解释了它的含义。所以当我阅读文档中给出的例子时我很困惑,无法弄清楚我的理解错在哪里。我用谷歌搜索并找到了这里。

考虑到混淆频繁,因此应该对文档进行修订。我建议使用以下内容:

创建数组的副本,其元素按以下方式重新排列: 新数组的第 k 个元素位于其在排序数组中的位置。所有小于第 k 个元素的元素都移动到该元素之前,所有大于该元素的元素都移动到它的后面。两个分区中元素的顺序未定义。如果还有其他元素等于第 k 个元素,这些元素可能出现在第 k 个元素之前或之后。

© www.soinside.com 2019 - 2024. All rights reserved.