在NumPy数组中查找包含最大值的行或列

19

如何在一个二维NumPy数组中找到包含最大值的行或列?

5个回答

25

您可以使用 np.argmax 以及 np.unravel_index,如下所示:

x = np.random.random((5,5))
print np.unravel_index(np.argmax(x), x.shape)

1
这是提出的最有效的解决方案。 - Ricardo Magalhães Cruz
“np.argmax(np.max(x, axis=1))”在性能方面与这种方式不可比较;它是最快的。 - Ali_Sh

24

如果你只需要其中一个:

np.argmax(np.max(x, axis=1))

对于该列(column),以及

np.argmax(np.max(x, axis=0))

对于该行。


这适用于整数元素,但对于浮点数呢? - Priyom saha
1
argmax 不会返回整个数组的最大索引,它只会在轴上计算。 np.argmax(np.max(x, axis=1)) 计算每行跨列的最大值,而不是整个数组的最大值。 - Shrivathsav Seshan

20
你可以使用np.where(x == np.max(x))
例如:
>>> x = np.array([[1,2,3],[2,3,4],[1,3,1]])
>>> x
array([[1, 2, 3],
       [2, 3, 4],
       [1, 3, 1]])
>>> np.where(x == np.max(x))
(array([1]), array([2]))

第一个值是行号,第二个值是列号。


3
如果存在并列的情况,这个操作可能会返回多个值。 - Sridhar Thiagarajan

4

np.argmax只返回压平数组中(第一个)最大元素的索引。因此,如果您知道数组的形状(您知道),则可以轻松找到行/列索引:

A = np.array([5, 6, 1], [2, 0, 8], [4, 9, 3])
am = A.argmax()
c_idx = am % A.shape[1]
r_idx = am // A.shape[1]

0

你可以直接使用np.argmax()

这个例子是从官方文档中复制的。

enter image description here

axis = 0 是用来在每一列中找到最大值,而 axis = 1 是用来在每一行中找到最大值。返回的是列/行的索引。


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