2013-06-02 282 views
10

是否有內置函數或非常簡單的方法來查找列表或numpy數組中的n個最大元素的索引?如何找到列表或np.array中的n個最大元素的索引,Python

K = [1,2,2,4,5,5,6,10] 

查找最大5個元素的索引?

我算重複一次以上,輸出應該是那些最大的數字

+0

這裏您的預期輸出是什麼? –

+2

你是否重複計算多次? – Colleen

+1

可能的重複[如何獲得N個最大值在numpy數組中的索引?](http://stackoverflow.com/questions/6910641/how-to-get-indices-of-n-maximum-values-in-一個numpy數組) –

回答

21

也許類似的索引列表:

>>> K 
[4, 5, 1, 6, 2, 5, 2, 10] 
>>> sorted(range(len(K)), key=lambda x: K[x]) 
[2, 4, 6, 0, 1, 5, 3, 7] 
>>> sorted(range(len(K)), key=lambda x: K[x])[-5:] 
[0, 1, 5, 3, 7] 

或使用numpy,您可以使用argsort

>>> np.argsort(K)[-5:] 
array([0, 1, 5, 3, 7]) 

argsort也是一個方法:

>>> K = np.array(K) 
>>> K.argsort()[-5:] 
array([0, 1, 5, 3, 7]) 
>>> K[K.argsort()[-5:]] 
array([ 4, 5, 5, 6, 10]) 
+0

非常感謝。這是一個明確而且合理的答案 –

+0

或者'import heapq; heapq.nlargest(n,range(len(K)),key = lambda x:K [x])' –

2

考慮下面的代碼,

N=5 
K = [1,10,2,4,5,5,6,2] 
#store list in tmp to retrieve index 
tmp=list(K) 
#sort list so that largest elements are on the far right 
K.sort() 
#To get the 5 largest elements 
print K[-N:] 
#To get the 5th largest element 
print K[-N] 
#get index of the 5th largest element 
print tmp.index(K[-N]) 

如果您希望忽略重複,然後使用()設置如下,

N=5 
K = [1,10,2,4,5,5,6,2] 
#store list in tmp to retrieve index 
tmp=list(K) 
#sort list so that largest elements are on the far right 
K.sort() 
#Putting the list to a set removes duplicates 
K=set(K) 
#change K back to list since set does not support indexing 
K=list(K) 
#To get the 5 largest elements 
print K[-N:] 
#To get the 5th largest element 
print K[-N] 
#get index of the 5th largest element 
print tmp.index(K[-N]) 

希望他們中的一個涵蓋你的問題:)

2

這應該工作:

K = [1,2,2,4,5,5,6,10] 
num = 5 
print 'K %s.' % (sorted(K, reverse=True)[:num]) 
相關問題