numpy 分区如何工作
Posted
技术标签:
【中文标题】numpy 分区如何工作【英文标题】:how numpy partition work 【发布时间】:2017-05-19 22:35:38 【问题描述】:我想弄清楚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])
我希望在分区后数组将拆分为小于一的元素、一和大于一的元素。 但是第二个零放在最后一个数组位置,这不是分区后的正确位置。
【问题讨论】:
查看文档docs.scipy.org/doc/numpy-dev/reference/generated/… 是的,我有。根据文档,“元素的第 k 个值将处于其最终排序位置,所有较小的元素将移到它之前,所有相等或更大的元素都将移到它后面。”。对非唯一数组的行为只字不提。我发现唯一数组上的分区工作正常。 【参考方案1】:documentation 说:
创建一个数组的副本,其中的元素以这样的方式重新排列 第 k 个位置的元素的值在它应该在的位置 一个排序数组。所有小于第 k 个元素的元素都被移动到前面 这个元素和所有相等或更大的元素都移到它后面。的排序 两个分区中的元素是未定义的。
在您给出的示例中,您选择了排序列表的第 2 个元素(从零开始),即 -1,如果数组已排序,它似乎位于正确的位置。
【讨论】:
这可能是“清楚”,但很容易将原始数组中的kth
位置与结果中的kth
位置混淆。
是的,这是真的。也许这部分可以在文档中得到更多强调。【参考方案2】:
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
作为arr_sorted
的2
位置的元素,而不是arr
。该元素被正确选择为-1
。
【讨论】:
除了它并没有真正对数组进行排序。第 k 个元素之前和之后的元素可以(并且确实)具有任意顺序。以上是关于numpy 分区如何工作的主要内容,如果未能解决你的问题,请参考以下文章
NumPy 多维数组迭代是如何工作的? (有和没有 nditer)
在进行矩阵工作时如何理解循环和额外 numpy 维度之间的权衡?