我知道该random.expovariate
功能,但这不是我所需要的。我想生成一个长度为的流,N
其中和i
之间的每个元素的选择概率为1 /(2 ^(i + 1))。因此,元素的选择概率为1/2,元素的概率为1/4,元素2,概率为1/8,依此类推。1
M
0
1
有什么简单的方法可以在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] 删除。
我来说两句