从给定概率的列表中找到整数个项目
find the integer number of items from a list given a probability
假设,我有一个长度为 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 的列表中,我应该每天得到 number of items = 4。如何在 Python 中获得给定概率的事件数?我是否应该使用泊松来获取一段时间内的事件数,但我不确定如何在 Python 中的泊松函数中包含列表的大小。以及当概率为 0.113 或 0.31 等时如何获得整数项。我如何在 Python 中获得它?
您可以在 python 代码中使用类似 int(len(m) * prob)
的代码,它就可以解决问题。请务必用 try/catch 括起来以避免错误。
您还应该验证 prob
值由 0 和 1 组成,包括
假设每个列表元素的选中与否是一个概率为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
假设,我有一个长度为 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 的列表中,我应该每天得到 number of items = 4。如何在 Python 中获得给定概率的事件数?我是否应该使用泊松来获取一段时间内的事件数,但我不确定如何在 Python 中的泊松函数中包含列表的大小。以及当概率为 0.113 或 0.31 等时如何获得整数项。我如何在 Python 中获得它?
您可以在 python 代码中使用类似 int(len(m) * prob)
的代码,它就可以解决问题。请务必用 try/catch 括起来以避免错误。
您还应该验证 prob
值由 0 和 1 组成,包括
假设每个列表元素的选中与否是一个概率为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