2017-09-20 11 views
0

Ich schrieb eine Funktion (ohne die random.poisson-Funktion zu verwenden), die eine Zufallszahl aus einer Poisson-Verteilung mit Lambda a erzeugt.Erzeugen von zufälligen Poisson-Zahlen

Beim Ausführen der Funktion mit verschiedenen Parametern, bekomme ich immer 0. Ich denke, es ist das Problem des Algorithmus, aber nicht wissen, wo es falsch ist.

Hier ist mein Code.

#takes a as lambda (mean) 
def random_poisson(a): 
    x = 0 
    p = 1 
    while p >= math.exp(a): 
     i = random.random() 
     p = p * i 
     x += 1 

    return x 

verschiedenen Lambda-Wert Ausprobieren:

print(random_poisson(3)) 
print(random_poisson(5)) 
print(random_poisson(math.log(5))) 

Der Ausgang:

0 
0 
0 

Thanks so much!

+0

Bitte geben Sie ein Beispiel für die Parameter, die Sie verwendet haben. – DyZ

+0

@DYZ Ich habe die Beispiele hinzugefügt :) – xzhang66

+0

Sie sollten 'math.exp (-a)' vorberechnen und das gespeicherte Ergebnis in Ihrem 'while'-Vergleich verwenden. – pjs

Antwort

1

Für jede positive a, math.exp(a) ist größer als 1, aber p ist 1. Die Schleifenbedingung nie wahr ist, wird die Schleife nie ausgeführt, und Ihre Funktion gibt den Ausgangswert von x.

+0

Oh ich hab dich! Es sollte -a anstelle von a sein. Vielen Dank! – xzhang66

Verwandte Themen