基于权重的列表中可变长度元素采样

问题描述 投票:0回答:1

我想根据给定的每个元素的权重从列表中选择一些项目。输出的长度未知。这需要做很多次。

所以,说我有一个像[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], ...]这样的东西>

这是我的代码。它可以工作,但是速度很慢(列表很长,[id, probability]的元素超过10,000,而我的结果是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)

我想根据给定的每个元素的权重从列表中选择一些项目。输出的长度未知。这需要做很多次。所以,说我有一个[id,...

python numpy probability choice
1个回答
0
投票

您可以按如下方式对采样步骤进行矢量化:

© www.soinside.com 2019 - 2024. All rights reserved.