2016-07-30 42 views
2

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

+0

不完全确定你要做什么 – wjk2a1

+0

嗨!我试图产生一个随机数X,它跟随我描述的分布。问题要求是根据分配选择X Pr X≥k = 1/k – Marco

+0

是您正在查找的内容:http://stackoverflow.com/a/4266312/2348704 – oat

回答

6

最简单的企图是让

X = 1.0/random.random() 

然而,random.random()可以有一个零值,因此这可能导致除以零错误。该值不能为1.0,根据文档,所以使用

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

对于该分布,

镨[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){自从跑了DOM()是在[0,1均匀)和[1-1/K,1)是一个子区间}

= 1/K

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

+0

是的,这就是我需要的!非常感谢你! – Marco

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超出界限。

+1

我看不清楚我的数学错了。我承认这很简短,只显示了一步,但那是因为我认为其余的对于那些知道概率的人来说是显而易见的。你激励我为我的平等添加更多步骤,但没有任何改变。你是否同意我目前的论述是正确的? (当然,我仍然遗漏了一些细节 - 我不想迂腐) –

+1

@RoryDaulton你的第二行是以你对X应该是什么的断言为前提的,它并不遵循任何基本规则可能性。数学从那里出现,因为你的断言恰好是真实的,但是这并不能使断言事先有效。相比之下,我的推导遵循众所周知的概率规则,最终导致您声称的结果。 – pjs

+1

显然,你的意思是你从期望的目标中得出表达式,而我表明我的表达满足目标。我们的工作方向相反,但这并不能使我的数学“无效”。有关这两种方法之间的区别的详细讨论,请参阅乔治波利亚的*如何解决它*。 –