Moje pytanie dotyczy funkcji random.choice. Jak wiemy, kiedy uruchomimy random.choice(['apple','banana']), powróci z 0,9 prawdopodobieństwem i 'banana' z prawdopodobieństwem 0.1? Jak to wdrożyć?

3
peter cai 1 grudzień 2013, 14:36

3 odpowiedzi

Najlepsza odpowiedź

Chodzi o utworzenie nowej listy z większą liczbą lub mniejszego elementu, którego nie masz do bia

To powinno wystarczyć:

import random

a = ['apple','banana']
probability = [0.1,0.9]

def biase(lst,probability):
    zipped = zip(lst,probability)
    lst = [[i[0]] * int(i[1]*100) for i in zipped]
    new = [b for i in lst for b in i]
    return new

biased_list = biase(a,probability)
random_word = random.choice(biased_list)
print random_word

Ten kod wytworzy banana w większości przypadków, ponieważ łańcuch banana jest powtarzany o 90% niż {x2}}

Dodałem listę o nazwie prawdopodobieństwo, a zapakowane są zaparkowane (listy Pythona są uporządkowane) , ale słownik jest bardziej odpowiedni dla tych zadań


A jeśli pójdziesz pod maską i drukujesz biased_list Zobaczysz coś takiego:

['apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana']
1
K DawG 1 grudzień 2013, 11:55

Podstawowym sposobem uzyskania losowej liczby między 0 a 1 i dokonać testu:

randNumber = random.random()
if randNumber < 0.9:
     fruit = "apple"
else:
     fruit = "banana"

Który może być uproszczony przez: ['apple', 'banana'][random.random()>0.9] (dzięki komentarzu @falsetru)

3
Maxime Lorant 1 grudzień 2013, 10:38

Na szczęście w Pythonie 3 możesz po prostu użyć

import random
random.choices(a, probability)
#random.choices(population, weights=None, *, cum_weights=None, k=1)
0
Yuexi 14 czerwiec 2018, 02:34