Генерация псевдослучайных чисел

Выборка в Python

James Chapman

Curriculum Manager, DataCamp

Что значит «случайный»?

{adjective} сделанный, происходящий или выбранный без какого-либо метода или осознанного решения.

1 Oxford Languages
Выборка в Python

Истинно случайные числа

  • Генерируются физическими процессами, например подбрасыванием монеты
  • Hotbits использует радиоактивный распад
  • RANDOM.ORG использует атмосферный шум
  • Истинная случайность — дорогостоящий процесс
1 https://www.fourmilab.ch/hotbits 2 https://www.random.org
Выборка в Python

Генерация псевдослучайных чисел

  • Генерация псевдослучайных чисел — дёшево и быстро
  • Следующее «случайное» число вычисляется из предыдущего «случайного» числа
  • Первое «случайное» число вычисляется из начального значения (seed)
  • Одно и то же начальное значение даёт одинаковую последовательность чисел
Выборка в Python

Пример генерации псевдослучайных чисел

seed = 1
calc_next_random(seed)
3
calc_next_random(3)
2
calc_next_random(2)
6
Выборка в Python

Функции генерации случайных чисел

  • Используйте префикс numpy.random, например numpy.random.beta()
Функция Распределение Функция Распределение
.beta Бета .hypergeometric Гипергеометрическое
.binomial Биномиальное .lognormal Логнормальное
.chisquare Хи-квадрат .negative_binomial Отрицательное биномиальное
.exponential Экспоненциальное .normal Нормальное
.f F .poisson Пуассона
.gamma Гамма .standard_t t
.geometric Геометрическое .uniform Равномерное
Выборка в Python

Визуализация случайных чисел

randoms = np.random.beta(a=2, b=2, size=5000)
randoms
array([0.6208281 , 0.73216171, 0.44298403, ..., 
       0.13411873, 0.52198411, 0.72355098])
plt.hist(randoms, bins=np.arange(0, 1, 0.05))
plt.show()

hist-beta.png

Выборка в Python

Начальные значения для генерации случайных чисел

np.random.seed(20000229)
np.random.normal(loc=2, scale=1.5, size=2)
array([-0.59030264, 1.87821258])
np.random.normal(loc=2, scale=1.5, size=2)
array([2.52619561, 4.9684949 ])
np.random.seed(20000229)
np.random.normal(loc=2, scale=1.5, size=2)
array([-0.59030264, 1.87821258])
np.random.normal(loc=2, scale=1.5, size=2)
array([2.52619561, 4.9684949 ])
Выборка в Python

Использование другого начального значения

np.random.seed(20000229)
np.random.normal(loc=2, scale=1.5, size=2)
array([-0.59030264, 1.87821258])
np.random.normal(loc=2, scale=1.5, size=2)
array([2.52619561, 4.9684949 ])
np.random.seed(20041004)
np.random.normal(loc=2, scale=1.5, size=2)
array([1.09364337, 4.55285159])
np.random.normal(loc=2, scale=1.5, size=2)
array([2.67038916, 2.36677492])
Выборка в Python

Давайте потренируемся!

Выборка в Python

Preparing Video For Download...