擅长:python、mysql、java
<p>阻力最小的途径是使用来自<a href="https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.random.poisson.html" rel="nofollow noreferrer">numpy</a>的内置泊松发生器。
但是,如果您想自己动手,下面的代码就可以了:</p>
<pre><code>import math
import random
def poisson(rate):
x = 0
product = random.random()
threshold = math.exp(-rate)
while product >= threshold:
product *= random.random()
x += 1
return x
</code></pre>
<p>这是基于泊松事件具有指数分布的到达时间间隔这一事实,因此可以<a href="https://en.wikipedia.org/wiki/Exponential_distribution#Generating_exponential_variates" rel="nofollow noreferrer">generate exponentials</a>直到它们的总和超过指定的速率。这个实现稍微聪明一点,尽管通过对求和/阈值关系的两侧进行指数化,对数求值的和变成简单的乘法,并且结果可以与预先计算的指数化阈值进行比较。这在代数上与指数随机变量之和相同,但它执行单个指数运算和lambda乘法的平均值,而不是lambda log求值的平均值求和。你知道吗</p>
<p>最后,无论你使用哪种发电机,你都需要知道它的速率。记住poisson是鱼的法语单词,prob&stats中最糟糕的笑话之一是“poisson标度”。这意味着小时费率可以通过简单地乘以24(一天中的小时数)转换为每日费率。例如,如果平均每小时3次,则平均每天72次。你知道吗</p>