我知道random.expovariate
函数,但这不是我所需要的。
我想生成一个长度为N
的流,其中i
和1
之间的每个元素M
的选择概率为1 /(2 ^(i + 1) )
因此,选择元素0
的概率为1/2,选择元素1
的概率为1/4,选择元素2的概率为1/8,等等。
在python中有什么简单的方法吗?
答案 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])