Вярно или грешно извеждане въз основа на вероятност

Има ли стандартна функция за 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