在Python中生成指数分布

蒂芙尼

我知道该random.expovariate功能,但这不是我所需要的。我想生成一个长度为的流,N其中i之间的每个元素的选择概率为1 /(2 ^(i + 1))。因此,元素的选择概率为1/2,元素的概率为1/4,元素2,概率为1/8,依此类推。1M01

有什么简单的方法可以在python中做到这一点吗?

磨损

简单的解决方案是还原函数并预测proba来找到数字:

def generate():
    proba = random.random()
    max = 0
    for i in range(1,M+1):
         max += (1/2)**i
         if(proba<= max):
              return i-1
    return generate()

如果M小,则分布不会收敛,因此并非所有[0,1]都是可到达的,因此您只需重试即可。

一点测试:

M = 10
res = [0 for i in range(M+1)]
for i in range(1000):
    res[generate()]+=1
plt.plot([r/1000 for r in res])

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章