2017-02-09 8 views
0

Я пишу код, который требует генерации двоичного результата из заданных вероятностей или списка. Я смотрю на случайный модуль, но не смог найти ничего, что могло бы решить проблему.Создать двоичный результат на основе данного Вероятность

Пример

ВОЗВРАТ 1 30% времени

ПРИМЕР

ВОЗВРАТ ИЛИ 1 0 45% и 55% времени

+0

На каком языке? – rici

+0

Язык Python – Hydroxl

ответ

1

Генерировать форму (0,1) случайное значение, проверьте, соответствует ли значение ≤ желаемой пропорции/p-значение и возвращает 0 или 1 соответственно. Предполагая, что rand является (0,1) генератор U, псевдокод будет выглядеть следующим образом:

function bernoulli(p) { 
    if rand <= p { 
    return 1 
    } else { 
    return 0 
    } 
} 
0

random.choices будет, конечно, делать то, что вы хотите, но это может быть излишним. Он может генерировать произвольно длинную последовательность, если выбор из конечного множества, где каждый элемент имеет независимую частоту. Существует пример его использование в разделе примеров связанной документации Python:

>>> # Estimate the probability of getting 5 or more heads from 7 spins 
>>> # of a biased coin that settles on heads 60% of the time. 
>>> trial = lambda: choices('HT', cum_weights=(0.60, 1.00), k=7).count('H') >= 5 
>>> sum(trial() for i in range(10000))/10000 
0.4169 

В этом примере весовых коэффициентов определяются как кумулятивное распределение:

cum_weights=(0.60, 1.00) 

Эквивалентного вызов с использованием индивидуальных весов , как в вашем примере, будет

weights=(0.60, 0.40) 

Вес не должен составлять до Q; они будут нормализованы.