numpy分区如何工作

问题描述 投票:8回答:2

我想弄清楚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
2个回答
5
投票

documentation说:

创建数组的副本,其元素重新排列,使得第k个位置的元素值位于排序数组中的位置。小于第k个元素的所有元素都在此元素之前移动,并且所有元素都等于或大于此元素。两个分区中元素的排序是未定义的。

在您给出的示例中,您已选择排序列表的第2个元素(从零开始),即-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

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