首页 > 解决方案 > 如何沿numpy数组的给定轴索引最大值的每次出现?

问题描述

假设我有以下 numpy 数组。

Q = np.array([[0,1,1],[1,0,1],[0,2,0]) 

问题:如何识别每个最大值沿轴 1 的位置?因此,所需的输出将类似于:

array([[1,2],[0,2],[1]]) # The dtype of the output is not required to be a np array.

使用 np.argmax 我可以识别沿轴的最大值的第一次出现,但不能识别后续值。

In: np.argmax(Q, axis =1) 
Out: array([1, 0, 1])    

我还看到了依赖于使用 np.argwhere 使用这样的术语的答案。

np.argwhere(Q == np.amax(Q)) 

这在这里也行不通,因为我不能限制 argwhere 沿单个轴工作。我也不能只是将 np 数组展平为单个轴,因为每行中的最大值会有所不同。我需要识别每行最大值的每个实例。

有没有一种pythonic方法可以在不循环整个数组的每一行的情况下实现这一点,或者是否有一个类似于 np.argwhere 的函数接受一个轴参数?

任何见解将不胜感激谢谢!

标签: pythonarraysnumpymaxvectorization

解决方案


尝试np.where

np.where(Q == Q.max(axis=1)[:,None])

输出:

(array([0, 0, 1, 1, 2]), array([1, 2, 0, 2, 1]))

不是您想要的输出,但包含等效信息。

您还可以使用np.argwherewhich 为您提供 zip 数据:

np.argwhere(Q==Q.max(axis=1)[:,None])

输出:

array([[0, 1],
       [0, 2],
       [1, 0],
       [1, 2],
       [2, 1]])

推荐阅读