2013-10-23 170 views
14

我需要查找数组中发生的多个最小值的索引。我很熟悉np.argmin,但它给了我一个数组中第一个最小值的索引。例如。在Python中查找给定数组中最小值的索引

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

这给我0,而不是我期待,0,5,7。

谢谢!

+6

尝试'np.where(一== a.min())' –

+0

是啊!这项工作。 – user2766019

+0

[在列表中使用max()/ min()获取返回的最大值或最小值项的索引](http://stackoverflow.com/questions/2474015/getting-the-index-of-the-返回最大或最小项目使用最大分钟在列表中) – mlt

回答

20

这应该做的伎俩:像你期望它在这种情况下

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

argmin不返回一个列表。

+1

不,它没有。而且,你正在覆盖一个内置函数'min'。 –

+1

@BasSwinckels你错过了我的编辑。定期分钟正如您所指出的那样正常工作。 –

3

也许

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

它会给[0,5,7]。

+0

不,它没有,因为您正在比较最小的索引,即0。 –

+0

EDITED,使用min而不是argmin,对不起。 – tonjo

+0

它现在工作,所以投票下来是不合适的;) – 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) 
相关问题