2013-06-07 19 views
7

Mam prosty problem. Potrzebuję sposobu, aby utworzyć funkcję, która generuje 0 w p procentach przypadków i 1 we wszystkich innych przypadkach. Próbowałem to robić z random.Random() jak poniżej:Python - prawdopodobieństwo modelowania

p = 0.40 

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

to jednak nie wydaje się dobrym sposobem. A może jest?

+1

To proste, oczywiste i poprawne. Co według ciebie jest z tym nie tak? –

+0

Nie wiem. Po prostu miałem dziwne przeczucie, więc pomyślałem, że lepiej zapytam. Dzięki. – darxsys

+1

Możesz zrobić 'return x> = p', który jest krótszy, ale może mniej czytelny. – lenz

Odpowiedz

8

Twoja obecna metoda jest całkowicie w porządku, możesz to sprawdzić, wykonując kilka prób z wieloma próbami. Na przykład oczekiwalibyśmy około 600000 Prawdziwych wyników przy 1000000 próbach:

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

Wygląda poprawnie.

Jak zauważył w komentarzach, można skrócić metoda trochę:

p = 0.40 

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

Jeśli chcesz 1 i 0 zamiast True i False można użyć int(random.random() >= p), ale jest to prawie na pewno konieczne.

Powiązane problemy