我想弄清楚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,如果数组已排序,它似乎位于正确的位置。
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
。