numpy数组的argmax返回非固定索引


99

我正在尝试获取Numpy数组中最大元素的索引。可以使用来完成numpy.argmax。我的问题是,我想在整个数组中找到最大的元素并获取其索引。

numpy.argmax 既可以沿一个轴(不是我想要的)应用,也可以沿扁平数组(这是我想要的一种)应用。

我的问题是,当我想要多维索引时,使用numpy.argmaxwithaxis=None返回平面索引。

我可以divmod用来获取非固定索引,但这很难看。有什么更好的方法吗?

Answers:



21
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()return 0)。


10
这将对数组进行三次迭代,而不仅仅是两次。一次找到最大值,第二次建立结果==,第三次True从该结果中提取值。请注意,可能有多个项目等于最大项目。
Sven Marnach

1

要获取所有出现的最大值的非平坦索引,可以使用代替来稍微修改eumiro的答案argwherewhere

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]])

这是无效的,因为您获得了3次传递和一个矩阵创建。想象一下,我们有9000x7000的图像(A3 @ 600dpi)-您还会坚持使用您的解决方案吗?
Maksym Ganenko '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.