2016-07-30 39 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

顯然,你的意思是你從期望的目標中得出表達式,而我表明我的表達滿足目標。我們的工作方向相反,但這並不能使我的數學「無效」。有關這兩種方法之間的區別的詳細討論,請參閱喬治波利亞的*如何解決它*。 –