Python. Функції генерування випадкових чисел з плаваючою комою.

Модуль random. Функції генерування випадкових чисел з плаваючою комою. Функції отримання випадкових чисел з використанням розподілів


Зміст


1. Функція random.random(). Отримати випадкове число в діапазоні [0; 1]

Функція random.random() використовується для отримання випадкового числа в діапазоні [0; 1].

Приклад.

# Функція random.random()

# підключити модуль random
import random

rnd_num = random.random() # rnd_num = 0.445307972457864

 

2. Функція random.uniform(). Отримати випадкове число в заданому інтервалі

Функція random.uniform() повертає випадкове число з плаваючою комою в заданому інтервалі. Загальна форма функції наступна

random.uniform(a, b)

де a, b – значення, що задають інтервал, в межах якого буде отримано результуюче випадкове число.
Значення кінцевої точки b визначається за формулою

a + (b – a) * random()

Тому належність кінцевої точки b заданому діапазону залежить від округлення цього значення для типу з плаваючою комою.

Стосовно значень a, b можливі два випадки:

  • ab. У цьому випадку випадкове число N отримується таким, що задовільняє умові aNb;
  • b<a. У цьому випадку отримується випадкове число N, яке задовільняє умові bNa.

Приклад.

# Функція random.uniform()
# підключити модуль random
import random

# Випадок 1. a<=b
# отримати випадкове число в межах [1.5, 2.7]
a = 1.5 # нижня межа
b = 2.7 # верхня межа
number = random.uniform(a, b) # number = 1.5904468975189021

# отримати випадкове число в межах [2.8, 3.3]
number = random.uniform(2.8, 3.3) # number = 2.8056183689090615

# Випадок 2. a>b
# отримати випадкове число в межах [2.7, 1.5]
a = 2.7
b = 1.5
number = random.uniform(2.7, 1.5) # number = 2.492950266273217

# Випадок 3. Від'ємні числа
a = -5.2
b = -3.8
number = random.uniform(b, a) # nbumber = -3.8546817374025304

 

3. Функція random.triangular(). Отримати випадкове число в заданому інтервалі та заданого режиму

Функція random.triangular() повертає випадкове число з плаваючою комою. Згідно документації Python загальна форма функції наступна

random.triangular(low, high, mode)

де

  • low – мінімально-можливе значення результуючого випадкового числа (нижня межа). За замовчуванням значення low є нульовим;
  • high – максимально-можливе значення результуючого випадкового числа (верхня межа). За замовчуванням значення high є рівне одиниці;
  • mode – аргумент, що задає режим виведення числового значення. За замовчуванням mode є серединою між аргументами low та high.

Приклад.

# Функція random.triangular
# підключити модуль random
import random

l = 1.5
h = 2.2

number = random.triangular(l,h) # number = 1.8082365488322254
number = random.triangular(-3.5, -6.2, 1) # number = -4.23510440860435


 

4. Функція random.betavariate(). Отримати випадкове число в межах [0; 1] на основі бета-розподілу

Функція random.betavariate() повертає випадкове число в межах [0; 1] на основі бета-розподілу (beta distribution). Загальна форма функції

random.betavariate(alpha, beta)

де

  • alpha, beta – параметри, для яких виконується умова alpha>0, beta>0. Значення, яке повертається знаходиться в межах 0 та 1. Якщо не дотриматись однієї з умов alpha>0, beta>0, то інтерпретатор видасть помилку.

Приклад.

# Функція random.betavariate
# підключити модуль random
import random

alpha = 7
beta = 9.5
number = random.betavariate(alpha, beta) # number = 0.22875540655977067

alpha = 3.0
beta = 1.5
number = random.betavariate(alpha, beta) # number = 0.6977893966563389

alpha = 0.1
beta = 0.1
number = random.betavariate(alpha, beta) # number = 0.0008738538852347506

 

5. Функція random.expovariate(). Отримати випадкове число на основі експоненціального розподілу

Функція random.expovariate() повертає випадкове значення на основі експоненціального розподілу (exponential distribution). Згідно документації Python, загальна форма функції наступна

random.expovariate(lambda)

де lambda – параметр, який рівний результату ділення 1.0 на бажане середнє значення. Параметр lambda має бути ненульовим (lambda≠0). Не слід плутати параметр lambda з однойменним зарезервованим словом мови Python.

Випадкове значення, яке повертає функція, може бути:

  • від 0 до +∞, якщо виконується умова lambda>0;
  • від -∞ до 0, якщо lambda<0.

Приклад.

# Функція random.expovariate(lambd)

# підключити модуль random
import random

# Випадок 1. lambd>0
lambd = 5
rnd_num = random.expovariate(lambd) # rnd_num = 0.6234234901590993

# Випадок 2. lambd<0
lambd = -8.2
rnd_num = random.expovariate(lambd) # rnd_num = -0.41089244332230856

 

6. Функція random.gammavariate(). Отримати випадкове число на основі Гамма-розподілу

Функція random.gammavariate() повертає випадкове число на основі Гамма-розподілу. Загальна форма оголошення функції

random.gammavariate(alpha, beta)

де alpha, beta – параметри розподілу для яких виконуються умови alpha>0, beta>0. Результуюча функція розподілу ймовірностей розраховується за формулою:

Python. Гамма-розподіл. Функція random.gammavariate()

У вищенаведеній формулі використовуються дві функції з бібліотеки Python:

  • функція math.exp(–x/beta) – обчислює експоненту;
  • функція math.gamma(alpha) – обчислює гамма-функцію.

Функцію random.gammavariate() не потрібно плутати з гамма-функцією.

Приклад.

# Функція random.gammavariate(alpha,beta)

# підключити модуль random
import random

alpha = 2.0
beta = 4.5
rnd_num = random.gammavariate(alpha, beta) # rnd_num = 5.046693970249287

alpha = 3.0
beta = 1.1
rnd_num = random.gammavariate(alpha, beta) # rnd_num = 5.797395009650084

 

7. Функція random.gauss(). Отримати випадкове число на основі розподілу Гауса

Функція random.gauss() повертає випадкове число на основі розподілу Гауса. Згідно документації Python загальна форма функції наступна:

random.gauss(mu, sigma)

де

  • mu – параметр, що визначає середнє значення;
  • sigma – параметр, що визначає стандартне відхилення.

У порівнянні з подібною функцією random.normalvariate() дана функція працює швидше.

Приклад.

# Функція random.gauss()

# підключити модуль random
import random

# Діапазон [1-0.5; 1+0.5]
mu = 1.0
sigma = 0.5
rnd_num = random.gauss(mu, sigma) # rnd_num = 1.0460662110757315

# Діапазон [250-0.3; 250+0.3]
mu = 250
sigma = 0.3
rnd_num = random.gauss(mu, sigma) # rnd_num = 250.09858114288903

 

8. Функція random.lognormvariate(). Отримати випадкове число на основі логарифмічного нормального розподілу

Функція random.lognormvariate() повертає випадкове число на основі логарифмічного нормального розподілу. Загальна форма функції

random.lognormvariate(mu, sigma)

де

  • mu – середнє значення;
  • sigma – стандартне відхилення. Значення sigma має бути більше нуля.

Якщо з отриманого випадкового числа взяти натуральний логарифм, то буде отримано нормальний розподіл.

Приклад.

# Функція random.lognormvariate()

# підключити модуль random
import random

# підключити модуль math
import math

# Діапазон [3-0.5; 3+0.5]
mu = 3.0
sigma = 0.5
rnd_num = random.lognormvariate(mu, sigma)
number = math.log(rnd_num) # діапазон [3-0.5; 3+0.5]

print("rnd_num = ", rnd_num)
print("log(rnd_num) = ", number)

Результат роботи програми

rnd_num = 13.614067024574224
log(rnd_num) = 2.6111035982231474

 

9. Функція random.normalvariate(). Отримати випадкове число на основі нормального розподілу

Функція random.normalvariate() повертає випадкове число на основі нормального розподілу. Загальна форма функції

random.normalvariate(mu, sigma)

де

  • mu – середнє значення;
  • sigma – стандартне відхилення.

Приклад.

# Функція random.normalvariate()

# підключити модуль random
import random

mu = 10.0
sigma = 2.0
rnd_num = random.normalvariate(mu, sigma) # rnd_num = 11.529818975017623

 

10. Функція random.vonmisesvariate(). Круговий розподіл даних

Функція random.vonmisesvariate() повертає випадкове число на основі кругового розподілу даних. Загальна форма оголошення функції наступна

random.vonmisesvariate(mu, kappa)

де

  • mu – середній кут, виражений в радіанах в межах [0; 2·π];
  • kappa – параметр концентрації. Значення kappa повинно задовільняти умові kappa≥0. Якщо kappa=0, то функція повертає випадковий кут в межах [0; 2·π].

Приклад.

# Функція random.vonmisesvariate()

# підключити модуль random
import random

mu = 10.0
kappa = 2.0
rnd_num = random.vonmisesvariate(mu, kappa) # rnd_num = 3.0806812333424087

mu = 1.0 # 1 радіан
kappa = 0
rnd_num = random.vonmisesvariate(mu, kappa) # rnd_num = 0.10073252837746509

 

11. Функція random.paretovariate(). Отримати випадкове число на основі розподілу Парето

Функція random.paretovariate() повертає випадкове число на основі розподілу Парето. Загальна форма функції наступна

random.paretovariate(alpha)

де

  • alpha – параметр форми. Значення alpha повинно бути ненульовим.

Приклад.

# Функція random.paretovariate()

# підключити модуль random
import random

alpha = 2.3
rnd_num = random.paretovariate(alpha) # rnd_num = 1.1150245760736535

alpha = -2.3
rnd_num = random.paretovariate(alpha) # rnd_num = 0.08129209858766535

 

12. Функція random.weibullvariate(). Отримати випадкове число на основі розподілу Вейбулла

Функція random.weibullvariate() повертає випадкове число на основі розподілу Вейбулла. Загальна форма функції

random.weibullvariate(alpha, beta)

де

  • alpha – параметр масштабу;
  • beta – параметр форми.

Приклад.

# Функція random.weibullvariate()

# підключити модуль random
import random

alpha = 1.5
beta = 2.0
rnd_num = random.weibullvariate(alpha, beta) # rnd_num = 1.5819775812273797

alpha = 500
beta = 50
rnd_num = random.weibullvariate(alpha, beta) # rnd_num = 486.648957741605

 


Зв’язані теми