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个元素之前和之后的元素可以(和确实)具有任意顺序。