2013-04-05 13 views
0
Ids = [ i for i, v in heapq.nlargest(RN, enumerate(score_real_test), key=operator.itemgetter(1))] 

這將給出列表score_real_test中RN最大值的索引。是否有可能獲得「最大值列表score_real_test並且滿足布爾條件COND」的RN最大值的索引?獲得列表中的N個最大值的索引,使得這些值遵守給定條件

應包含RN索引。

編輯:現在我用這個解決方案,但它是不是最好的一個:

score_real_test_2 = np.sort([ v for i,v in enumerate(score_real_test) if pred_real_test[i] == NOVEL ]) 
score_real_test_2 = score_real_test_2[len(score_real_test_2)-RN:] 
large_dist_ids = [i for i in range(len(score_real_test)) if score_real_test[i] in score_real_test_2] 
+0

可以嗎明確提出你的疑問? – 2013-04-05 18:43:54

+0

@AswinMurugesh你在我的問題中不瞭解什麼?我想爲我選擇的N個大值添加一個條件,例如,如果indexe滿足A_Given_List [i] == true,那麼如果它位於N個最大值中,我會考慮它,否則,我不會考慮我。這是清楚的嗎? – shn 2013-04-05 18:47:45

+0

通常,您可以在列表理解中添加if語句。例如:'[我爲我在我的列表]' - >'[我爲我在我的列表如果(我%2)]''。這是你在找什麼? – jedwards 2013-04-05 19:00:19

回答

0

如果你想保留這是一個班輪,你可以簡單地用一個列表理解替換枚舉(或生成器表達式),根據條件預先過濾數據。

像這樣:

Ids = [i for i, v in heapq.nlargest(RN, [(j,v) in enumerate(score_real_test) if pred_real_test[i] == NOVEL], key=operator.itemgetter(1))] 

或者,如果你想保持它更清晰,你可以添加選擇之前過濾步驟(仍無需預先排序):

tmp = [item for item in enumerate(score_real_test) if pred_real_test[item[0]] == NOVEL] 
Ids = [i for i, v in heapq.nlargest(RN, tmp, key=operator.itemgetter(1))] 
+0

ID會是枚舉(tmp)中的元素的索引或score_real_test中的元素的索引? – shn 2013-04-07 18:23:43

+0

嗯,你說得對,這將是錯誤的指標,但這很容易糾正。我會編輯以反映。 – entropy 2013-04-07 20:35:16

+0

那麼?你糾正了嗎? – shn 2013-04-08 18:05:24

相關問題