Рассчитать процент вероятности Пуассона - PullRequest
16 голосов
/ 11 ноября 2008

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

  • целое число
  • среднее число

и возвращает число с плавающей запятой.

В Python (я пробовал RandomArray и NumPy) он возвращает массив случайных чисел Пуассона. Что мне действительно нужно, так это процент того, что это событие произойдет (это постоянное число, и массив каждый раз имеет разные числа - так это среднее?).

например:

print poisson(2.6,6)

возвращает [1 3 3 0 1 3] (и каждый раз, когда я запускаю его, он другой).

Число, которое я получаю с помощью calc / excel, составляет 3,19 (POISSON(6,2.16,0)*100).

Я неправильно использую пуассон питона (не каламбур!) Или я что-то упускаю?

Ответы [ 3 ]

24 голосов
/ 11 ноября 2008

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 голосов
/ 11 ноября 2008

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

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 голос
/ 11 ноября 2008

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

...