Pergunta

Quando você usa a função Poisson no Excel (ou no OpenOffice Calc), são necessários dois argumentos:

  • um número inteiro
  • um número 'médio'

e retorna um flutuador.

No Python (tentei aleatório e numpy), ele retorna uma variedade de números aleatórios de Poisson. O que eu realmente quero é a porcentagem que esse evento ocorrerá (é um número constante e a matriz tem sempre números diferentes - então é uma média?).

por exemplo:

print poisson(2.6,6)

retorna [1 3 3 0 1 3] (E toda vez que eu o corro, é diferente).

O número que recebo de Calc/Excel é 3,19 (POISSON(6,2.16,0)*100).

Estou usando o Poisson do Python errado (sem trocadilho!) Ou estou perdendo alguma coisa?

Foi útil?

Solução

É fácil fazer à mão, mas você pode transbordar dessa maneira. Você pode fazer o expoente e o fatorial em um loop para evitar o transbordamento:

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

Outras dicas

scipy tem o que você quer

>>> 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)

Vale a pena notar que é muito fácil calcular à mão, também.

Esta página Explica por que você recebe uma matriz e o significado dos números nela, pelo menos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top