2013-06-07 11 views
7

Ho un semplice problema. Ho bisogno di un modo per creare una funzione che generi 0 in p percento e 1 in tutti gli altri casi. Ho provato a farlo con random.random() come questo:Python - Probabilità di modellazione

p = 0.40 

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

Tuttavia, questo non sembra un buon modo. O lo è?

+1

Questo è semplice, ovvio e corretto. Cosa ne pensi di sbagliato? –

+0

Non lo so. Ho appena avuto una strana sensazione su questo, quindi ho pensato che sarebbe meglio chiedere. Grazie. – darxsys

+1

Si potrebbe fare 'return x> = p', che è più corto, ma forse meno leggibile. – lenz

risposta

8

Il tuo metodo attuale è perfetto, puoi verificarlo eseguendo alcune prove con molti tentativi. Per esempio ci aspettiamo circa 600000 risultati Veri con 1000000 tentativi:

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

Sembra giusto.

Come notato nei commenti, è possibile abbreviare il metodo un po ':

p = 0.40 

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

Se volete 1 e 0 invece di True e False è possibile utilizzare int(random.random() >= p), ma questo è quasi certamente inutile.