Domanda

Quando si utilizza la funzione POISSON in Excel (o in OpenOffice Calc), vengono utilizzati due argomenti:

  • un numero intero
  • un numero "medio"

e restituisce un float.

In Python (ho provato RandomArray e NumPy) restituisce un array di numeri casuali di Poisson. Quello che voglio davvero è la percentuale che si verificherà questo evento (è un numero costante e l'array ha ogni volta numeri diversi, quindi è una media?).

ad esempio:

print poisson(2.6,6)

restituisce [1 3 3 0 1 3] (e ogni volta che lo eseguo, è diverso).

Il numero che ottengo da calc / excel è 3.19 ( POISSON (6,2.16,0) * 100 ).

Sto usando il poisson del pitone nel modo sbagliato (niente gioco di parole!) o mi sto perdendo qualcosa?

È stato utile?

Soluzione

È facile da fare a mano, ma puoi straripare facendolo in quel modo. Puoi fare l'esponente e il fattoriale in un ciclo per evitare l'overflow:

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

Altri suggerimenti

scipy ha quello che vuoi

>>> 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 notare che è abbastanza facile calcolare a mano, anche .

Questa pagina spiega perché ottieni un array, e il significato dei numeri in essa contenuti, almeno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top