【问题标题】:How to find all argmax in ndarray如何在ndarray中找到所有argmax
【发布时间】:2016-11-30 20:42:32
【问题描述】:

我有一个二维 NumPy ndarray。

array([[  0.,  20.,  -2.],
   [  2.,   1.,   0.],
   [  4.,   3.,  20.]])

如何获取最大元素的所有索引?所以我想作为输出数组([0,1],[2,2])。

【问题讨论】:

    标签: python numpy argmax


    【解决方案1】:

    最大相等掩码上使用np.argwhere -

    np.argwhere(a == a.max())
    

    示例运行 -

    In [552]: a   # Input array
    Out[552]: 
    array([[  0.,  20.,  -2.],
           [  2.,   1.,   0.],
           [  4.,   3.,  20.]])
    
    In [553]: a == a.max() # Max equality mask
    Out[553]: 
    array([[False,  True, False],
           [False, False, False],
           [False, False,  True]], dtype=bool)
    
    In [554]: np.argwhere(a == a.max()) # array of row, col indices of max-mask
    Out[554]: 
    array([[0, 1],
           [2, 2]])
    

    如果您使用浮点数,您可能希望在此处使用一些容差。因此,考虑到这一点,您可以使用具有一些默认绝对和相对容差值的np.isclose。这将替换之前的 a == a.max() 部分,就像这样 -

    In [555]: np.isclose(a, a.max())
    Out[555]: 
    array([[False,  True, False],
           [False, False, False],
           [False, False,  True]], dtype=bool)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      • 2016-04-26
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      相关资源
      最近更新 更多