在矩阵中找到最大值的索引(Python)

8

我想找到一个二维 numpy 数组中最大值的下标 [i,j]:

a = numpy.array([[1,2,3],[4,3,1]])

我尝试使用numpy.argsort()来做这件事,但它只能沿着一个轴进行排序并返回一个数组。 一种解决方法是使用for循环比较argsort返回的所有索引(沿两个轴),但这似乎有点复杂。也许有更简单的解决方案?


a.argmax(1) 能得到你想要的结果吗? - Jon Clements
@JonClements 它返回array([2, 0], dtype=int64),我不确定它的意思。对于这个问题,结果应该是(1,0),因为最大元素是4。 - user1340852
2个回答

13
您需要使用 np.unravel_index np.argmax 将返回一个索引,就像遍历数组的平铺版本一样。 unravel_index 将给出 N-D 索引。
a = np.random.randint(0, 10, (4,4))
ind = np.unravel_index(np.argmax(a, axis=None), a.shape)  # returns a tuple

简单、紧凑且恰好符合我的要求!谢谢 :) - user1340852

4
也许这个可以返回你所寻找的内容?它会返回最大值的索引(
max_xy = np.where(a == a.max() )

将结果压缩,以获得元组列表形式的索引:
zip(max_xy[0], max_xy[1]) #=> [(1, 0)]

如果有多个最大值: a = np.array([[4,2,3],[4,3,4]]),它会返回#=> [(0, 0), (1, 0), (1, 2)]

要返回一个元组的第一个找到的最大值,只需获取数组的第一个元素:

zip(max_xy[0], max_xy[1])[0] #=> (0, 0)

是的,它给了我正确的答案。但是有一个小问题。当我压缩它时,我得到了这个:(array([1], dtype=int64), array([0], dtype=int64))。我并没有完全理解元组[(1,0)]。 - user1340852

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接