2017-02-07 5 views
0

У меня есть 6 цветов, связанных со значениями 1 до 6, которые все равновероятны:Сделать изменение числа более вероятна в Python

randc = random.randint(1,6) 
    if randc == 1: 
     print 'red' 
    elif randc == 2: 
     print 'green' 
    elif randc == 3: 
     print 'purple' 
    elif randc == 4: 
     print 'yellow' 
    elif randc == 5: 
     print 'orange' 
    elif randc == 6: 
     print 'brown' 

Теперь я хочу второй цвет для печати таким образом, что 50% времени он будет таким же, как и первый цвет. В прошлом я использовал NumPy, чтобы увеличить вероятность, но только делает установленное значение более вероятное:

randcol = numpy.random.choice((1,2), p=[0.8, 0.2]) 
    if randcol == 1: 
     print 'red' # will occur 80% of the time 
    elif randcol == 2: 
     print 'green' # will occur 20% of the time 

Как изменить вероятность таким образом, что он будет делать предыдущий выбор более вероятно?

+0

На боковой ноте вы можете захотеть взглянуть на перечисляемые типы для присвоения цвета числу: https://docs.python.org/3/library/enum.html –

+0

не понимаю ваш вопрос, вы хотите сделать своего рода [цепь Маркова] (https://en.wikipedia.org/wiki/Markov_chain)? – armnotstrong

ответ

2

Вы можете изменить p или вход каждый раз, когда вы его вызываете.

colors = ['red', 'green', 'purple', 'yellow', 'orange', 'brown'] 
prev_choice = numpy.random.choice(colors) 
print(prev_choice) 
# pick the first color uniformly. 

for _ in range(100): 
    prev_choice = numpy.random.choice([prev_choice] + colors, p=[0.4] + [0.1]*6) 
    print(prev_choice) 
    # we pick the new color same as the previous one with 40% chance, 
    # and all of the colors uniformly with 10% each. 
    # (so the total chance of choosing the previous color is 40% + 10% = 50%) 
1

Попробуйте это без использования NumPy или любой другой библиотеки,

randc = random.randint(1,6) 
probList = range(1,7) + [randc]*4 
next = probList[random.randint(0,len(probList)-1)] 

следующий будет иметь 50% вероятность того, что вы хотели.

Поскольку probList будет заполнен 5-кратным последним цветом из 10, это вероятность 50%. А для остальных цветов вероятность одинаково делится.

Пример:

Позволяет сказать randC= 5

Теперь probList станет

[1,2,3,4,5,6,5,5,5,5] 

Таким образом получают 5 из приведенного выше списка будет иметь вероятность 50%.