代码之家  ›  专栏  ›  技术社区  ›  Mel

numpy的argpartition如何处理文档示例?

  •  5
  • Mel  · 技术社区  · 7 年前

    我试图理解numpy的配分函数。我已经做好准备了 documentation

    import numpy as np
    
    x = np.array([3, 4, 2, 1])
    print("x: ", x)
    
    a=np.argpartition(x, 3)
    print("a: ", a)
    
    print("x[a]:", x[a])
    

    这是输出。。。

    ('x: ', array([3, 4, 2, 1]))
    ('a: ', array([2, 3, 0, 1]))
    ('x[a]:', array([2, 1, 3, 4]))
    

    在a=np.argpartition(x,3)行中,第k个元素不是最后一个元素(数字1)吗?如果它是数字1,当x被排序时,1不应该成为第一个元素(元素0)吗?

    在x[a]中,为什么2是1前面的第一个元素?

    2 回复  |  直到 7 年前
        1
  •  20
  •   zvone    7 年前

    更完整的答案是什么 argpartition 是否在的文档中 partition ,上面写着:

    创建数组的副本,其元素以这种方式重新排列 将在排序数组中。小于第k个元素的所有元素 在该元素之前移动,并且移动所有相等或更大的元素 背后。两个分区中元素的顺序是

    所以,对于输入数组 3, 4, 2, 1 ,排序后的数组将是 1, 2, 3, 4 .

    np.partition([3, 4, 2, 1], 3) 将在第三个(即最后一个)元素中具有正确的值(即与排序数组相同)。第三个元素的正确值为 4

    让我为所有的 k 要说清楚:

    • np.partition([3, 4, 2, 1], 0) 1
    • np.partition([3, 4, 2, 1], 1) - [1, 2 , 4, 3]
    • np.partition([3, 4, 2, 1], 2)
    • np.划分([3,4,2,1],3) - [2, 1, 3, ]

    换句话说:

    argpartition ,除了 arg分区 返回可用于形成相同结果的索引。

        2
  •  5
  •   Nandu Raj ngock    6 年前

    取以下数组:

    array = np.array([9, 2, 7, 4, 6, 3, 8, 1, 5])
    
    the corresponding indices are: [0,1,2,3,4,5,6,7,8] where 8th index = 5 and 0th = 9
    

    如果我们这样做了 np.partition(array, k=5) ,代码将获取第5个元素(不是索引),然后将其放入新数组中。然后它将把这些元素;前面的第五个元素;第五个元素,如下所示:

    pseudo output: [lower value elements, 5th element, higher value elements]

    如果我们计算得出:

    array([3, 5, 1, 4, 2, 6, 8, 7, 9])

    的arg部分 np.argpartition()

    np.argpartition(array, 5) 我们将得到:

    array([5, 8, 7, 3, 1, 4, 6, 2, 0])

    从上面看,原来的数组有这样的结构[index=value]

    您可以将索引的值映射到输出,并满足以下条件:

    argpartition() = partition() ,如下所示:

    [索引形式]数组([5,8,7,3,1,4,6,2,0])变为

    [3, 5, 1, 4, 2, 6, 8, 7, 9]
    

    np.partition(array)

    array([3, 5, 1, 4, 2, 6, 8, 7, 9])
    

        3
  •  5
  •   Imtinan Azhar    5 年前

    我记得我也很难弄清楚,也许文档写得不好,但这就是它的意思

    a=np.argpartition(x, 3) 然后x的排序方式是只对第k个索引处的元素进行排序(在我们的例子中k=3)

    ('x[a]:', array([2, 1, 3, 4])) 其中只有元素3被排序。

    我希望这能澄清这一点,如果您仍然感到困惑,请随时发表评论:)