Python-моделирование вероятности
У меня есть простая проблема. Мне нужен способ сделать функцию, которая генерирует 0s в P процентах случаев и 1s во всех других случаях. Я попытался сделать это с рэндомом.random() вот так:
p = 0.40
def generate():
x = random.random()
if x < p:
return 0
else:
return 1
однако, это не кажется хорошим способом. Или это так?
1 ответов
ваш текущий метод отлично подходит, вы можете проверить это, выполнив несколько испытаний с большим количеством попыток. Например, мы ожидаем приблизительно 600000 истинных результатов с 1000000 попытками:
>>> 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
выглядит примерно так.
как отмечено в комментариях, вы можете немного сократить свой метод:
p = 0.40
def generate():
return random.random() >= p
если вы хотите 1
и 0
вместо True
и False
можно использовать int(random.random() >= p)
, но это почти определенно не нужно.