#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:
Просто используйте библиотеку PyProbs. Он очень прост в использовании.
>>> from PyProbs import Probability as pr
>>>
>>> # You can pass float (i.e. 0.5, 0.157), int (i.e. 1, 0) or str (i.e. '50%', '3/11')
>>> pr.Prob(50/100)
False
>>> pr.Prob(50/100, num=5)
[False, False, False, True, False]
Ответ №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 лет?