Псевдовипадкова генерація чисел

Sampling у Python

James Chapman

Curriculum Manager, DataCamp

Що означає «випадковий»?

{adjective} зроблене, виконане, таке, що відбувається або обране без методу чи свідомого рішення.

1 Oxford Languages
Sampling у Python

Справді випадкові числа

  • Генеруються з фізичних процесів, як-от підкидання монет
  • Hotbits використовує радіоактивний розпад
  • RANDOM.ORG використовує атмосферний шум
  • Справжня випадковість коштує дорого
1 https://www.fourmilab.ch/hotbits 2 https://www.random.org
Sampling у Python

Псевдовипадкова генерація чисел

  • Псевдовипадкова генерація чисел дешева й швидка
  • Наступне «випадкове» число обчислюють з попереднього «випадкового»
  • Перше «випадкове» число обчислюють із seed
  • Однакове значення seed дає ті самі випадкові числа
Sampling у Python

Приклад псевдовипадкової генерації

seed = 1
calc_next_random(seed)
3
calc_next_random(3)
2
calc_next_random(2)
6
Sampling у Python

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

  • Додавайте префікс numpy.random, наприклад numpy.random.beta()
function distribution function distribution
.beta Бета .hypergeometric Гіпергеометричний
.binomial Біноміальний .lognormal Логнормальний
.chisquare Хі-квадрат .negative_binomial Негативний біноміальний
.exponential Експоненційний .normal Нормальний
.f F .poisson Пуассон
.gamma Гама .standard_t t
.geometric Геометричний .uniform Рівномірний
Sampling у 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()

гістограма бета-розподілу

Sampling у 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 ])
Sampling у Python

Використання іншого seed

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])
Sampling у Python

Давайте потренуємось!

Sampling у Python

Preparing Video For Download...