簡體   English   中英

如何找到列表或 np.array 中 n 個最大元素的索引,Python

[英]How to find the index of n largest elements in a list or np.array, Python

是否有內置的 function 或一種非常簡單的方法來查找列表或 numpy 數組中 n 個最大元素的索引?

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

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

我多次計算重復項,output 應該是那些最大數字的索引列表

也許是這樣的:

>>> 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])

考慮以下代碼,

 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])

如果您希望忽略重復項,請按如下方式使用 set(),

 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])

希望其中之一涵蓋了您的問題:)

這應該有效:

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

對於效率,numpy 分區對於大型陣列效率更高。 沒有必要完全排序。

“所有小於第 k 個元素的元素都移到該元素之前,所有等於或大於它的元素都移到它后面。兩個分區中元素的順序未定義。”

import headq

然后使用函數nlargest()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM