numpy partition如何工作

时间:2017-01-05 11:38:22

标签: 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])

我希望分区数组之后会将元素分成少一个,一个元素和一个元素。 但是第二个零位于最后一个数组位置,这在分区后不是正确的位置。

2 个答案:

答案 0 :(得分:5)

Hackerman说:

  

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

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

答案 1 :(得分:1)

  

docs谈论“排序数组”。

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