特定分布后的随机数

时间:2016-07-30 16:01:15

标签: python random probability

我遇到了问题。我必须在python中实现一个算法,它需要一个随机数X,如Pr [X≥k] = 1 / k。我不知道是否已经存在一个可以给我这个确切值的分布,或者是否有办法使用简单的随机python库实现这个随机生成器。有没有办法做到这一点?提前感谢您的帮助!

3 个答案:

答案 0 :(得分:6)

最简单的尝试是

X = 1.0 / random.random()

但是,random.random()的值可以为零,因此可能会导致被零除错误。根据文档,该值永远不能为1.0,因此请使用

X = 1.0 / (1.0 - random.random())

对于此分发,

Pr [X≥k] = Pr [0< 1 /X≤1/ k]

= Pr [0< 1 - random.random()≤1/ k]

= Pr [1 - 1 /k≤random.random()< 1]

= 1 - (1 - 1 / k){因为random()在[0,1)中是一致的,[1-1 / k,1]是一个子区间}

= 1 / k

(我希望我可以在这里使用MathJax!)当然,所有这些都假定k≥1,因为你的条件没有意义。我还假设X是一个连续的随机变量,从1到正无穷大。如果X是一个正整数(因此k也是一个正整数),那么只需采用我给出的公式的底线。

答案 1 :(得分:1)

Rory最终得到了正确答案,但他的数学证明它不具有建设性 - 它没有显示如何得到答案,它只表明他的断言是正确的。以下使用概率的基本规则来得出答案。

Pr{X ≥ k} = 1 - Pr{X < k}

如果X是连续随机变量,

Pr{X < k} = Pr{X ≤ k}

右边是累积分布函数F X (k)的定义,所以

Pr{X ≥ k} = 1 - F(k) = 1/k
F(k) = 1 - 1/k

然后by the inversion theorem我们可以设置等于U,统一(0,1)RV,并求解k:

U = 1 - 1/k
1 - U = 1/k
k = 1 / (1 - U)

将您的随机数生成器用于U,您就完成了。正如Rory指出的那样,这只适用于k≥1,否则会导致CDF越界。

答案 2 :(得分:-2)

您需要的是一个统一的随机数生成器,用于生成随机数。 然后可以将这些数字转换为分布(例如乘法)

https://docs.python.org/2/library/random.html
https://docs.python.org/3.5/library/random.html

这些可以生成随机数。 我没有得到的是你的发行版。它如何以图形方式显示?如果你有一个代表它的函数,用它乘以随机数。

相关问题