计算泊松概率百分比

16 投票
3 回答
21653 浏览
提问于 2025-04-11 17:54

在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的泊松函数(没有恶意哦!)还是我漏掉了什么?

3 个回答

1

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

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)

值得一提的是,手动计算其实也挺简单的,也是可以的

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

撰写回答