在Python中生成指数分布

时间:2018-10-05 08:19:09

标签: python python-3.x probability probability-density

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

在python中有什么简单的方法吗?

1 个答案:

答案 0 :(得分:2)

简单的解决方案是还原函数并预测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])

enter image description here