我想在二维numpy数组中找到最大值的索引[i,j]:
a = numpy.array([[1,2,3],[4,3,1]])
我尝试使用numpy.argsort()进行此操作,但它返回一个数组,因为它只能沿轴进行。 一种解决方案是通过使用for循环比较argsort返回的所有索引(沿两个轴)上的元素,但这似乎有点复杂。也许有一个简单的解决方案?
答案 0 :(得分:3)
您想要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
答案 1 :(得分: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)