在 Python 中生成指数分布
Generate exponential distribution in Python
我知道 random.expovariate
函数,但这不是我需要的。
我想生成一个长度为 N
的流,其中 1
和 M
之间的每个元素 i
的选择概率为 1/(2^(i+1) )
因此,选择元素 0
的概率为 1/2,选择元素 1
的概率为 1/4,选择元素 2 的概率为 1/8,等等
在 python 中有什么简单的方法可以做到这一点吗?
简单的解决方案是还原函数并预测概率以找到数字:
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])
我知道 random.expovariate
函数,但这不是我需要的。
我想生成一个长度为 N
的流,其中 1
和 M
之间的每个元素 i
的选择概率为 1/(2^(i+1) )
因此,选择元素 0
的概率为 1/2,选择元素 1
的概率为 1/4,选择元素 2 的概率为 1/8,等等
在 python 中有什么简单的方法可以做到这一点吗?
简单的解决方案是还原函数并预测概率以找到数字:
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])