在Python中查找给定数组中最小值的索引

24

我需要找到一个数组中多个最小值出现的索引。我对np.argmin非常熟悉,但它只会给我数组中第一个最小值的索引。例如:

a = np.array([1,2,3,4,5,1,6,1])    
print np.argmin(a)

这让我得到了0,但我期望的是0、5、7。

谢谢!


7
尝试使用np.where(a == a.min()) - Kobi K
3个回答

27

这应该能起到作用:

a = np.array([1,2,3,4,5,1,6,1]) 
print np.where(a == a.min())

在这种情况下,argmin并不像你期望的那样返回一个列表。


1
不,它不会。此外,您正在覆盖一个内置函数 min - Bas Swinckels
1
@BasSwinckels,你错过了我的编辑。正则化的 min 正如你指出的那样运行良好。 - Tom Swifty

4
也许
mymin = np.min(a)
min_positions = [i for i, x in enumerate(a) if x == mymin]

它将会给出[0,5,7]。

不,它不会,因为你正在与最小值的索引进行比较,而该索引为0。 - Bas Swinckels
已编辑,使用min而不是argmin,请原谅。 - tonjo

1
我认为这是最简单的方法,虽然它没有使用任何花哨的numpy函数。
a       = np.array([1,2,3,4,5,1,6,1])                                        
min_val = a.min()                                                            

print "min_val = {0}".format(min_val)                                        

# Find all of them                                                           
min_idxs = [idx for idx, val in enumerate(a) if val == min_val]              
print "min_idxs = {0}".format(min_idxs)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接