看不懂np.partition

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

我尝试理解该函数,但输出看起来很奇怪。

array = np.array([9, 2, 7, 4, 6, 3, 8, 1, 5])
print(np.partition(array, kth=0))

这是我由于某种原因得到的输出:

[1 2 7 4 6 3 8 9 5]

预计获得:

[X X X X X X X X 9]

我错过了什么?

python numpy
2个回答
2
投票

根据 numpy.partition 文档中的描述,

[1 2 7 4 6 3 8 9 5]
kth=0
输入数组的正确分区:

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

我认为混乱在于对kth的模糊描述。这是分区操作之后的索引,而不是之前的索引。因此,在您的示例中, kth=0 并不是指输入数组 (9) 索引 0 处的值,它指的是相同值的排序数组的索引 0 处的任何值,在本例中为 1 .

任何搭配

[1 X X X X X X X X]

的安排均有效。

    


0
投票

分区逻辑:

应用 np.partition(array, kth=0) 后,输出数组将具有以下属性:

索引 0 处的元素将是最小的元素(在本例中为 1)。 索引 0 之前的所有元素(本例中没有)都将小于或等于索引 0 处的元素。 索引 0 之后的所有元素都将大于或等于索引 0 处的元素。 数组可能未完全排序,但相对于第 k 个索引的元素将采用正确的分区顺序。 结果:

np.partition(array, kth=0) 的结果将是:

[1 2 7 4 6 3 8 9 5]

总结 kth=0 指定您要对数组进行分区,以使最小元素(在本例中为 1)位于第一个位置。 结果的第 0 个索引处将有 1,所有其他元素将被重新排列,使它们大于或等于 1。但是,不保证其余元素按任何特定顺序排列。

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