从给定概率的列表中查找项目的整数数



假设,我有一个长度为 20 的列表,每天,我想从这个列表中找出给定一定概率的项目的整数。提取整数项后,我想做进一步的操作。

m = [10,20,30,40, 50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200]
prob = 0.2

在上面的例子中,我想找出在给定 0.2 概率的情况下平均每天选择多少个项目。因此,平均而言,从长度为 20 且概率为 0.2 的列表中,我每天应该得到项目数 = 4。如何在 Python 中给定概率地获取事件数?我是否应该使用 Poisson 来获取时间段内的事件数,但我不确定,如何在 Python 的泊松函数中包含列表的大小。以及如何在概率为 0.113 或 0.31 等时获得整数项。如何在 Python 中获取此内容?

假设每个列表元素的选择与否是一个概率为prob的独立事件,选择的项目数是一个参数为len(m)prob的二项式随机变量。这种随机变量的期望值为prob * len(m)

如果要模拟此随机变量(而不是计算其预期值(,可以使用:

import random
def binomial_variate(n,p):
return sum(random.random() < p for _ in range(n))

例如

>>> trials = [binomial_variate(20,0.12) for _ in range(100)]
>>> trials
[5, 6, 2, 1, 2, 4, 3, 3, 2, 3, 4, 1, 3, 2, 2, 3, 1, 0, 2, 4, 6, 1, 1, 2, 2, 3, 4, 2, 2, 1, 2, 1, 3, 4, 2, 3, 2, 2, 4, 4, 5, 1, 1, 1, 1, 2, 2, 3, 2, 2, 5, 4, 4, 1, 4, 4, 3, 5, 2, 3, 2, 4, 3, 4, 4, 2, 2, 1, 2, 1, 2, 1, 3, 0, 4, 3, 2, 4, 1, 2, 1, 2, 3, 2, 2, 3, 2, 1, 4, 4, 2, 2, 2, 2, 2, 3, 3, 3, 4, 2]
>>> sum(trials)/100
2.55
>>> 20*0.12
2.4

你可以在python代码中使用类似int(len(m) * prob)的东西,它就可以了。一定要用尝试/捕获包围以避免错误。
还应验证prob值是否介于 0 和 1 之间

最新更新