【问题标题】:find indices of maximum value in matrix (python)在矩阵中找到最大值的索引(python)
【发布时间】:2018-11-25 18:46:56
【问题描述】:

我想在 2d numpy 数组中找到最大值的索引[i,j]:

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

我尝试使用 numpy.argsort() 执行此操作,但它返回一个数组,因为它只能沿轴完成。 一种解决方案是通过使用 for 循环比较 argsort 返回的所有索引处的元素(沿两个轴),但这似乎有点复杂。也许有一个简单的解决方案?

【问题讨论】:

  • a.argmax(1) 能得到你想要的吗?
  • @JonClements 它返回数组([2, 0],dtype=int64),我不确定这意味着什么。对于这个问题,结果应该是 (1,0),因为最大元素是 4。

标签: python arrays matrix max


【解决方案1】:

也许这可以返回您正在寻找的东西?它返回最大值的索引(

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)]
【解决方案2】:

你想要np.unravel_indexnp.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

【讨论】:

  • 简单,紧凑,正是我想要的!谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2016-11-13
  • 1970-01-01
相关资源
最近更新 更多