有效地生成大量有偏见的硬币翻转

时间:2016-11-27 08:38:02

标签: python performance numpy random

我正在寻找针对以下问题的高性能Python解决方案:

  

翻转有偏见的硬币n次,使得头部(= 1)的概率为   等于给定的概率p。 n是数百万。

天真的Python实现很明显,但我怀疑可以有一个非常有效的基于numpy的解决方案。

1 个答案:

答案 0 :(得分: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