我正在尝试获取Numpy数组中最大元素的索引。这可以使用numpy.argmax
来完成。我的问题是,我想找到整个数组中最大的元素,并得到它的索引。
numpy.argmax
可以沿着一个轴应用,这不是我想要的,也可以应用在扁平阵列上,这是我想要的。
我的问题是,当我想要多维索引时,将numpy.argmax
与axis=None
一起使用会返回平面索引。
我可以使用divmod
来获得非平面索引,但这感觉很难看。有更好的方法吗?
您可以在numpy.argmax()
:的结果上使用numpy.unravel_index()
>>> a = numpy.random.random((10, 10))
>>> numpy.unravel_index(a.argmax(), a.shape)
(6, 7)
>>> a[6, 7] == a.max()
True
np.where(a==a.max())
返回最大元素的坐标,但必须解析数组两次。
>>> a = np.array(((3,4,5),(0,1,2)))
>>> np.where(a==a.max())
(array([0]), array([2]))
与argmax
相比,这将返回等于最大值的所有元素的坐标。argmax
仅返回其中一个(np.ones(5).argmax()
返回0
)。
要获得所有出现的最大值的非平面索引,可以使用argwhere
而不是where
:来稍微修改eumiro的答案
np.argwhere(a==a.max())
>>> a = np.array([[1,2,4],[4,3,4]])
>>> np.argwhere(a==a.max())
array([[0, 2],
[1, 0],
[1, 2]])