如何在 ndarray 中找到所有 argmax

How to find all argmax in ndarray

我有一个二维 NumPy ndarray。

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

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

最大等式掩码 -

上使用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)