2013-06-07 13 views
7

Basit bir sorunum var. Yüzde durumda% 0 ve diğer tüm durumlarda 1s üreten bir fonksiyona ihtiyacım var. Böyle random.random() ile yapıyor çalıştı: Python - modelleme olasılığı

p = 0.40 

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

Ancak, bu iyi bir yol gibi görünmüyor. Yoksa öyle mi?

+1

Bu basit, açık ve doğru. Bunun nesi yanlış? –

+0

Bilmiyorum. Bu konuda garip bir his vardı, bu yüzden daha iyisini istediğimi düşündüm. Teşekkürler. – darxsys

+1

Geri dönüş x> = p', daha kısa olabilir, ancak belki daha az okunabilir. – lenz

cevap

8

Geçerli yönteminiz gayet iyi, bunu pek çok denemede birkaç deneme yaparak doğrulayabilirsiniz. Örneğin, 1000000 girişimi ile yaklaşık 600000 Gerçek sonuç bekleriz:

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

Doğru görünüyor. Eğer int(random.random() >= p) kullanabilirsiniz False1 ve 0 yerine True istiyor ve varsa

p = 0.40 

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

, ancak bu neredeyse kesinlikle gereksizdir:

açıklamalarda belirtildiği gibi

, kendi yöntem biraz kısaltabilir.