2008-11-11 4 views
16

При использовании функции POISSON в Excel (или в OpenOffice Calc), она принимает два аргумента:Рассчитать вероятность Пуассон процент

  • целое число
  • 'средний' номер

и возвращает float.

В 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 (не каламбур!), Или я что-то упускаю?

ответ

13

Это легко сделать вручную, но вы можете переполнять его таким образом. Вы можете сделать показатель степени и факториал в цикле, чтобы избежать переполнения:

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 
1

This page объясняет, почему вы получаете массив и значение чисел в нем, по крайней мере.

23

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) 

Стоит отметить, что это довольно легко вычислить вручную, too.

+1

Альтернативный импорт будет: `от scipy.stats импорта poisson` затем` poisson.pmf (6, 2,6) `= +0,031867055625524499 – Jarad 2017-09-18 21:59:48

Смежные вопросы