Generowanie liczb pseudolosowych

Próbkowanie w Pythonie

James Chapman

Curriculum Manager, DataCamp

Co oznacza „losowy"?

{przymiotnik} wykonany, dokonany, zachodzący lub wybrany bez metody ani świadomej decyzji.

1 Oxford Languages
Próbkowanie w Pythonie

Prawdziwe liczby losowe

  • Generowane z procesów fizycznych, np. rzutu monetą
  • Hotbits wykorzystuje rozpad promieniotwórczy
  • RANDOM.ORG wykorzystuje szumy atmosferyczne
  • Prawdziwa losowość jest kosztowna
1 https://www.fourmilab.ch/hotbits 2 https://www.random.org
Próbkowanie w Pythonie

Generowanie liczb pseudolosowych

  • Generowanie liczb pseudolosowych jest tanie i szybkie
  • Kolejna „losowa" liczba jest obliczana na podstawie poprzedniej
  • Pierwsza „losowa" liczba jest obliczana na podstawie ziarna
  • To samo ziarno daje te same liczby losowe
Próbkowanie w Pythonie

Przykład generowania liczb pseudolosowych

seed = 1
calc_next_random(seed)
3
calc_next_random(3)
2
calc_next_random(2)
6
Próbkowanie w Pythonie

Funkcje generujące liczby losowe

  • Poprzedź przez numpy.random, np. numpy.random.beta()
funkcja rozkład funkcja rozkład
.beta Beta .hypergeometric Hipergeometryczny
.binomial Dwumianowy .lognormal Logarytmiczno-normalny
.chisquare Chi-kwadrat .negative_binomial Ujemny dwumianowy
.exponential Wykładniczy .normal Normalny
.f F .poisson Poissona
.gamma Gamma .standard_t t
.geometric Geometryczny .uniform Jednostajny
Próbkowanie w Pythonie

Wizualizacja liczb losowych

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()

Histogram rozkładu beta

Próbkowanie w Pythonie

Ziarna liczb losowych

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 ])
Próbkowanie w Pythonie

Użycie innego ziarna

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])
Próbkowanie w Pythonie

Czas na ćwiczenia!

Próbkowanie w Pythonie

Preparing Video For Download...