Истинный или ложный вывод в зависимости от вероятности

Существует ли стандартная функция для Python, которая выводит True или False вероятностно на основе ввода случайного числа от 0 до 1?

пример того, что я имею в виду:

def decision(probability):
    ...code goes here...
    return ...True or False...

приведенный выше пример, если при вводе, скажем, 0,7, вернет True с вероятностью 70% и false с вероятностью 30%


person Mike Vella    schedule 04.05.2011    source источник


Ответы (4)


Учитывая функцию rand, которая возвращает число от 0 до 1, вы можете определить decision следующим образом:

bool decision(float probability)
{
   return rand()<probability;
}

Предполагая, что rand() возвращает значение в диапазоне [0.0, 1.0) (поэтому может выводить 0,0, никогда не выводит 1,0).

person Blindy    schedule 04.05.2011
comment
Этот вопрос помечен python, поэтому ваш пример кода кажется немного неуместным. - person Daenyth; 04.05.2011
comment
@Blindy +1 Спасибо за псевдокод;) Я работаю с Java и очень рад, что нашел ваш фрагмент, даже если вопрос помечен как Python. - person AgentKnopf; 01.05.2012
comment
@Zainodis, хе да, я считаю, что C-подобные языки почти универсальны, если их использовать на действительно высоком уровне! - person Blindy; 01.05.2012

Я использую это для генерации случайного логического значения в python с вероятностью:

from random import randint
n=8 # inverse of probability
rand_bool=randint(0,n*n-1)%n==0

поэтому, чтобы расширить это:

def rand_bool(prob):
    s=str(prob)
    p=s.index('.')
    d=10**(len(s)-p)
    return randint(0,d*d-1)%d<int(s[p+1:])

Я придумал это сам, но, похоже, это работает.

person aritra    schedule 31.05.2020

Если вы хотите собрать много данных, я бы предложил использовать карту:

    from numpy import random as rn
    p = 0.15
    data = rn.random(100)
    final_data = list(map(lambda x: x < p, data))
person Paul    schedule 28.10.2019
comment
Что это добавляет, чего нет ни в одном из ответов за 8 лет? - person Dragonthoughts; 28.10.2019

person    schedule
comment
Обратите внимание, что random.random() равномерно генерирует числа в [0, 1). 0 включительно и 1 эксклюзив - person one; 15.01.2021