Python numpy分区是如何工作的

Python numpy分区是如何工作的,python,arrays,sorting,numpy,Python,Arrays,Sorting,Numpy,我试图弄清楚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]) 我希望在分区之后,数组将拆分为元素少一个、元素多一个。 但是第二个零放在最后一个数组位置,这不是分区后的正确位置。表示: 创建一个数组的副本,其元素以如下方式重新排列: 第k个位置的元素值位于它将位于的位置 已排序的数组。所有小于第k

我试图弄清楚
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])

我希望在分区之后,数组将拆分为元素少一个、元素多一个。 但是第二个零放在最后一个数组位置,这不是分区后的正确位置。

表示:

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

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

“排序数组”的说法

np.partition
首先对提供的数组中的元素进行排序。在这种情况下,原始阵列是:

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\u排序的
2
位置的元素,而不是
arr
。元素被正确选择为
-1

请参阅文档是,我有。根据文件,“元素的第k个值将处于其最终排序位置,所有较小的元素将在其前面移动,所有相等或较大的元素将在其后面移动。”。对非唯一数组的行为只字未提。我发现在唯一数组上的分区工作得很好。它可能是“清晰的”,但很容易将原始数组中的
kth
位置与结果中的
kth
位置混淆。是的,这是正确的。也许文档中可以更强调这一部分,只是它并没有真正对数组进行排序。第k个元素之前和之后的元素可以(和确实)具有任意顺序。