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), но это почти определенно не нужно.