Ids = [ i for i, v in heapq.nlargest(RN, enumerate(score_real_test), key=operator.itemgetter(1))]
这将给出列表score_real_test中RN最大值的索引。是否有可能获得RN最大值的索引“在列表score_real_test并满足布尔条件COND”?
Ids应包含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 :(得分: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))]