Я хочу выбрать некоторые элементы из списка в зависимости от заданного веса для каждого элемента. Длина вывода не известна. Это нужно делать много раз.
Итак, скажем, у меня есть список [id, probability]
вроде [[1, 0.2], [2, 0.3], [3, 0.45], [4, 0.05], [5,1.]]
, я хочу получить что-то вроде [[1,3,5], [5], [3,5], [5], [1,2,4,5], ...]
Вот мой код сделать это. Это работает, но довольно медленно (список длинный, более 10000 элементов [id, probability]
, а мой результат - тысячи selection
). Знаете ли вы какой-нибудь способ сделать это (намного) быстрее?
import numpy as np
items = [[1, 0.2], [2, 0.3], [3, 0.45], [4, 0.05], [5,1.]]
combinations = []
for n in range(1000):
selection = []
for i in items:
chosen = np.random.choice([True, False], p=[i[1], 1.-i[1]])
if chosen:
selection.append(i[0])
combinations.append(selection)