如何返回numpy中的所有最小索引

Sal*_*ali 26 python numpy

在numpy中阅读argmin函数的文档有点困惑.它看起来应该做的工作:

读这个

返回沿轴的最小值索引.

我可能会认为

np.argmin([5, 3, 2, 1, 1, 1, 6, 1])
Run Code Online (Sandbox Code Playgroud)

将返回所有索引的数组:将是 [3, 4, 5, 7]

但不是这样,它只返回3.捕获的位置,或者我应该怎么做以获得我的结果?

use*_*ica 38

当您考虑多维数组时,该文档更有意义.

>>> x = numpy.array([[0, 1],
...                  [3, 2]])
>>> x.argmin(axis=0)
array([0, 0])
>>> x.argmin(axis=1)
array([0, 1])
Run Code Online (Sandbox Code Playgroud)

指定轴后,argmin沿给定轴获取一维子数组,并返回每个子数组最小值的第一个索引.它不返回单个最小值的所有索引.

要获得最小值的所有指数,您可以这样做

numpy.where(x == x.min())
Run Code Online (Sandbox Code Playgroud)


nne*_*neo 16

请参阅文档numpy.argmax(文档引用numpy.argmin):

在多次出现最大值的情况下,返回与第一次出现相对应的索引.

文档的措辞("索引"而不是"索引")是指提供时的多维情况axis.

所以,你不能这样做np.argmin.相反,这将工作:

np.where(arr == arr.min())
Run Code Online (Sandbox Code Playgroud)


Luk*_*ous 5

我想快速补充一下,正如用户 grofte 提到的,np.where返回一个元组,它声明它是一个简写,它有一个直接返回数组nonzero的相应方法。flatnonzero

所以,最干净的版本似乎是

my_list = np.array([5, 3, 2, 1, 1, 1, 6, 1])
np.flatnonzero(my_list == my_list.min())
=> array([3, 4, 5, 7])
Run Code Online (Sandbox Code Playgroud)