如何根据概率选择随机指标?

时间:2016-01-12 02:07:28

标签: python probability

我有一个数字列表,我试图编写一个函数来选择n个随机索引,我的可能性是百分比[i]

功能:

def choose_randomly(probabilities, n):
    percentages = accumulated_s(probabilities)
    result = []
    for i in range(n):
        r = random()
        for j in range(n):
            if r < percentages[j]:
                result = result + [j]
    return result

accumulation_s将生成相应的概率列表。

我期待这样的结果:

choose_randomly([1, 2, 3, 4], 2) -> [3 3 0]
choose_randomly([1, 2, 3, 4], 2) -> [1 3 1] 

问题是这不会返回n个指标。任何人都可以指出我做错了什么吗? 非常感谢你!

1 个答案:

答案 0 :(得分:1)

一旦你找到了合适的概率范围,你就完成了;从内循环中break生成下一个值,或者您的行为就像所有高于正确阈值的概率一样:

    # Enumerate all percentages, not just first n
    for j, pct in enumerate(percentages):
        if r < pct:
            result.append(j)  # Don't create tons of temporary lists; mutate in place
            break  # <-- Don't add more results

另请注意,如果您在概率集中有很多值,那么使用bisect module中的函数来找到正确的值,而不是每次线性扫描都是有意义的;对于percentages中的少量条目,线性扫描很好,但对于大量的O(log n)次查找可能会超过O(n)次扫描。