Python 返回非平坦索引的numpy数组的Argmax

Python 返回非平坦索引的numpy数组的Argmax,python,multidimensional-array,numpy,Python,Multidimensional Array,Numpy,我试图得到Numpy数组中最大元素的索引。 这可以使用numpy.argmax完成。我的问题是,我想找到整个数组中最大的元素,并得到它的索引 numpy.argmax可以沿一个轴应用,这不是我想要的,也可以应用在平坦阵列上,这正是我想要的 我的问题是,当我需要多维索引时,使用numpy.argmax和axis=None返回平面索引 我可以使用divmod获得一个非平面索引,但这感觉很难看。有没有更好的办法 np.where(a==a.max()) 返回最大元素的坐标,但必须分析数组两次 >

我试图得到Numpy数组中最大元素的索引。 这可以使用
numpy.argmax
完成。我的问题是,我想找到整个数组中最大的元素,并得到它的索引

numpy.argmax
可以沿一个轴应用,这不是我想要的,也可以应用在平坦阵列上,这正是我想要的

我的问题是,当我需要多维索引时,使用
numpy.argmax
axis=None
返回平面索引

我可以使用
divmod
获得一个非平面索引,但这感觉很难看。有没有更好的办法

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.one(5).argmax()
返回
0
)。

您可以在
numpy.argmax()的结果上使用:


要获取所有出现的最大值的非平坦索引,可以使用
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]])

这将迭代数组三次,而不是两次。一次查找最大值,第二次生成
==
的结果,第三次从该结果中提取
真值。请注意,可能有多个项等于最大值。这是无效的,因为您获得了三个过程和一个矩阵创建。想象一下我们有9000x7000张图片(A3@600dpi)-你还会坚持你的解决方案吗?
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]])