2013-06-07 8 views
7

Ich habe ein einfaches Problem. Ich brauche einen Weg, um eine Funktion zu machen, die 0 in p Prozent Fällen und 1s in allen anderen Fällen erzeugt. Ich versuchte es mit random.random(), wie dies zu tun:Python - Modellierung Wahrscheinlichkeit

p = 0.40 

def generate(): 
    x = random.random() 
    if x < p: 
     return 0 
    else: 
     return 1 

Doch dies scheint nicht wie ein guter Weg. Oder ist es?

+1

Das ist einfach, offensichtlich und korrekt. Was ist falsch daran? –

+0

Ich weiß es nicht. Ich hatte nur ein komisches Gefühl, also dachte ich, ich sollte besser fragen. Vielen Dank. – darxsys

+1

Sie könnten 'return x> = p', das ist kürzer, aber vielleicht weniger lesbar. – lenz

Antwort

8

Ihre aktuelle Methode ist vollkommen in Ordnung, Sie können dies überprüfen, indem Sie ein paar Versuche mit vielen Versuchen durchführen. Zum Beispiel würden wir etwa 600000 Echte Ergebnisse mit 1000000 Versuche erwarten:

>>> sum(generate() for i in range(1000000)) 
599042 
>>> sum(generate() for i in range(1000000)) 
599670 
>>> sum(generate() for i in range(1000000)) 
600011 
>>> sum(generate() for i in range(1000000)) 
599960 
>>> sum(generate() for i in range(1000000)) 
600544 

Sieht richtig.

Wie in den Kommentaren erwähnt, können Sie Ihre Methode ein wenig verkürzen:

p = 0.40 

def generate(): 
    return random.random() >= p 

Wenn Sie 1 und 0 statt True und False Sie int(random.random() >= p) verwenden können, aber das ist fast auf jeden Fall nicht notwendig.