16

在 Excel(或 OpenOffice Calc)中使用 POISSON 函数时,它需要两个参数:

  • 一个整数
  • 一个“平均”数字

并返回一个浮点数。

在 Python 中(我尝试了 RandomArray 和 NumPy),它返回一个随机泊松数数组。我真正想要的是这个事件将发生的百分比(它是一个常数,并且数组每次都有不同的数字 - 所以它是一个平均值吗?)。

例如:

print poisson(2.6,6)

返回[1 3 3 0 1 3](并且每次我运行它时,都会有所不同)。

我从 calc/excel 得到的数字是 3.19 ( POISSON(6,2.16,0)*100)。

我使用 python 的泊松是错误的(没有双关语!)还是我错过了什么?

4

3 回答 3

26

scipy有你想要的

>>> scipy.stats.distributions
<module 'scipy.stats.distributions' from '/home/coventry/lib/python2.5/site-packages/scipy/stats/distributions.pyc'>
>>> scipy.stats.distributions.poisson.pmf(6, 2.6)
array(0.031867055625524499)

值得注意的是,手动计算也很容易

于 2008-11-11T13:17:55.417 回答
14

手工很容易做到,但你可以这样做。您可以在循环中执行指数和阶乘以避免溢出:

def poisson_probability(actual, mean):
    # naive:   math.exp(-mean) * mean**actual / factorial(actual)

    # iterative, to keep the components from getting too large or small:
    p = math.exp(-mean)
    for i in xrange(actual):
        p *= mean
        p /= i+1
    return p
于 2008-11-11T13:24:40.860 回答
1

这个页面解释了为什么你得到一个数组,以及其中数字的含义,至少。

于 2008-11-11T13:12:40.667 回答