获取多维 NumPy 数组中最大值的位置
Posted
技术标签:
【中文标题】获取多维 NumPy 数组中最大值的位置【英文标题】:Get the position of the largest value in a multi-dimensional NumPy array 【发布时间】:2011-04-04 19:07:27 【问题描述】:如何(索引)?
【问题讨论】:
如果有多个位置的值相同,您需要全部还是只需要第一个(或最后一个或任意一个)? 【参考方案1】:argmax()
方法应该会有所帮助。
更新
(阅读评论后)我相信argmax()
方法也适用于多维数组。链接的文档给出了一个例子:
>>> a = array([[10,50,30],[60,20,40]])
>>> maxindex = a.argmax()
>>> maxindex
3
更新 2
(感谢KennyTM 的评论)您可以使用unravel_index(a.argmax(), a.shape)
将索引作为元组获取:
>>> from numpy import unravel_index
>>> unravel_index(a.argmax(), a.shape)
(1, 0)
【讨论】:
但是我有一个多维数组。 使用unravel_index(a.argmax(), a.shape)
将索引作为元组获取。
数字 3 是什么意思?好的,我明白了。我在寻找 (1,0)。
确实应该有一个内置函数来获取元组的值
unravel_index 文档:docs.scipy.org/doc/numpy-1.10.1/reference/generated/…【参考方案2】:
(编辑)我指的是一个已被删除的旧答案。接受的答案是在我之后。我同意argmax
比我的回答更好。
这样做不是更易读/更直观吗?
numpy.nonzero(a.max() == a)
(array([1]), array([0]))
或者,
numpy.argwhere(a.max() == a)
【讨论】:
不必要的慢,因为您计算了最大值,然后将其与所有 a 进行比较。 unravel_index(a.argmax(), a.shape). 我投了赞成票,因为它没有假设 a.max() 在 a 中的出现次数。而 a.argmax() 将返回“第一次”出现(在多维数组的情况下定义不明确,因为它取决于遍历路径的选择)。 docs.scipy.org/doc/numpy/reference/generated/… 我也认为 np.where() 是一个更自然/可读的选择,而不是 np.nonzero()。【参考方案3】:您可以简单地编写一个函数(仅适用于 2d):
def argmax_2d(matrix):
maxN = np.argmax(matrix)
(xD,yD) = matrix.shape
if maxN >= xD:
x = maxN//xD
y = maxN % xD
else:
y = maxN
x = 0
return (x,y)
【讨论】:
【参考方案4】:另一种方法是将numpy
数组更改为list
并使用max
和index
方法:
List = np.array([34, 7, 33, 10, 89, 22, -5])
_max = List.tolist().index(max(List))
_max
>>> 4
【讨论】:
以上是关于获取多维 NumPy 数组中最大值的位置的主要内容,如果未能解决你的问题,请参考以下文章