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 最大値のインデックスを取得することは可能ですか?

ID には 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]
4

1 に答える 1

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))] 
于 2013-04-05T19:59:01.830 に答える