如何在 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)
我有一个二维 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)