随机生成给定比率的数字

时间:2014-05-01 13:24:43

标签: python random

我需要在指数分布后分布的正给定区间(a,b)上生成数字。使用反向CDF方法,我创建了一个指数分布的数字生成器。但是,当然,这个数字是一个正数,我希望它在给定的时间间隔内。我该怎么办才能在间隔时间内生成?

使用逆cdf方法生成指数分布的数字的代码是in  蟒

u = random.uniform(0,1)
return (-1/L)*math.log(u)

其中L是给定的正参数。

提前致谢

1 个答案:

答案 0 :(得分:2)

结果 x 的概率通常为 L exp( -Lx )。但是,当我们被限制为[ a,b ]时,[ a,b ]中 x 的概率按比例增加1 / a b 之间发生的CDF分数:从 a b 的整数( L exp( -Lt dt )= - (exp( -Lb ) - exp( -La ))。

因此,x的pdf是

L exp( -Lx ))/(exp( -La ) - exp( -Lb ),

在x的

处给出cdf

a x [ L exp( -Lt )/(exp()的积分-La ) - exp( -Lb )) dt ]

= [-exp( -Lx )+ exp( -La )] / [exp( -La ) - exp(< em> -Lb )] = u

现在反转:

exp( -Lx )= exp( -La ) - u [exp( -La ) - exp( -Lb )]

-Lx = -La + log(1 - u [1 - exp( -Lb ) / EXP( -La )])

x = a +( - 1 / L )日志(1 - u [1 - exp ( -Lb )/ EXP( -La )])

给出代码:

u = random.uniform(0,1)
return a + (-1/L)*math.log( 1 - u*(1 - math.exp(-L*b)/math.exp(-L*a)) ) 

请注意:对于较大的L或a,math.exp(-L*a)将舍入为0,从而导致ZeroDivisionError