繁体   English   中英

在Python中生成指数分布

[英]Generate exponential distribution in Python

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

有什么简单的方法可以在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])

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM