Вывод True или false на основе вероятности

#python #math #probability

Вопрос:

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

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

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

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

Ответ №1:

 import random

def decision(probability):
    return random.random() < probability
 

Комментарии:

1. Обратите внимание, что random.random() числа генерируются равномерно в [0, 1). 0 включительно и 1 исключительно

Ответ №2:

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

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

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

Комментарии:

1. Этот вопрос помечен тегом python , поэтому ваш образец кода кажется немного неуместным.

2. @Blindy 1 Спасибо за псевдокод 😉 Я из Java — фона и очень рад, что нашел ваш фрагмент-даже если вопрос помечен тегом Python.

3. @Zainodis, хе да, я нахожу C-подобные языки почти универсальным языком, если использовать их на действительно высоком уровне!

Ответ №3:

Ответ №4:

Я использую это для генерации случайного логического значения в 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:])
 

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

Ответ №5:

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

     from numpy import random as rn
    p = 0.15
    data = rn.random(100)
    final_data = list(map(lambda x: x < p, data))
 

Комментарии:

1. Что это добавляет к тому, чего нет ни в одном из ответов за 8 лет?