2016-11-27 33 views
1

我尋找高性能的Python解決以下問題:有效地產生大陣列偏置硬幣的翻轉

翻轉偏置硬幣n倍,使得磁頭概率(= 1)是 等於給定概率p。 n以百萬計。

天真的Python實現是顯而易見的,但我懷疑可以有一個非常有效的基於numpy的解決方案。

+2

的可能重複[我怎樣模擬python中的偏向硬幣翻轉?](http://stackoverflow.com/questions/477237/how-do-i-simulate-flip-of-bi ased-coin-in-python) –

+0

你對發行有任何偏好嗎?制服,二項式等? – Divakar

回答

3

您正在尋找NumPy的內置np.random.choice -

np.random.choice([1,0],n,p=[p,1-p]) 

讓我們驗證 -

In [120]: p = 0.8 

In [121]: n = 100000 

In [122]: (np.random.choice([1,0],n,p=[p,1-p])==1).mean() 
Out[122]: 0.80003999999999997 

小艾高效太 -

In [123]: %timeit np.random.choice([1,0],n,p=[p,1-p]) 
100 loops, best of 3: 4 ms per loop