Pregunta

Cuando usa la función POISSON en Excel (o en OpenOffice Calc), toma dos argumentos:

  • un entero
  • un número 'promedio'

y devuelve un flotador.

En Python (probé RandomArray y NumPy) devuelve una matriz de números poisson aleatorios. Lo que realmente quiero es el porcentaje de que este evento ocurrirá (es un número constante y la matriz tiene cada vez números diferentes, entonces, ¿es un promedio?).

por ejemplo:

print poisson(2.6,6)

devuelve [1 3 3 0 1 3] (y cada vez que lo ejecuto, es diferente).

El número que obtengo de calc / excel es 3.19 ( POISSON (6,2.16,0) * 100 ).

¿Estoy usando mal el poisson del pitón (sin juego de palabras) o me estoy perdiendo algo?

¿Fue útil?

Solución

Es fácil hacerlo a mano, pero puede desbordarse de esa manera. Puede hacer el exponente y el factorial en un bucle para evitar el desbordamiento:

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

Otros consejos

scipy tiene lo que quieres

>>> 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 la pena señalar que es bastante fácil de calcular a mano, también .

Esta página explica por qué obtiene una matriz, y el significado de los números que contiene, al menos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top