Pseudonáhodné generování čísel

Vzorkování v Pythonu

James Chapman

Curriculum Manager, DataCamp

Co znamená „náhodný"?

{přídavné jméno} vytvořený, provedený, vzniklý nebo zvolený bez metody či vědomého rozhodnutí.

1 Oxford Languages
Vzorkování v Pythonu

Skutečná náhodná čísla

  • Generována z fyzikálních procesů, např. hodu mincí
  • Hotbits využívá radioaktivní rozpad
  • RANDOM.ORG využívá atmosférický šum
  • Skutečná náhodnost je nákladná
1 https://www.fourmilab.ch/hotbits 2 https://www.random.org
Vzorkování v Pythonu

Pseudonáhodné generování čísel

  • Pseudonáhodné generování je levné a rychlé
  • Další „náhodné" číslo se vypočítá z předchozího „náhodného" čísla
  • První „náhodné" číslo se vypočítá ze semene
  • Stejné semeno vždy vrátí stejná náhodná čísla
Vzorkování v Pythonu

Příklad pseudonáhodného generování čísel

seed = 1
calc_next_random(seed)
3
calc_next_random(3)
2
calc_next_random(2)
6
Vzorkování v Pythonu

Funkce pro generování náhodných čísel

  • Přidejte předponu numpy.random, např. numpy.random.beta()
funkce rozdělení funkce rozdělení
.beta Beta .hypergeometric Hypergeometrické
.binomial Binomické .lognormal Lognormální
.chisquare Chí-kvadrát .negative_binomial Negativní binomické
.exponential Exponenciální .normal Normální
.f F .poisson Poissonovo
.gamma Gamma .standard_t t
.geometric Geometrické .uniform Rovnoměrné
Vzorkování v Pythonu

Vizualizace náhodných čísel

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

Vzorkování v Pythonu

Semena náhodných čísel

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 ])
Vzorkování v Pythonu

Použití jiného semene

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])
Vzorkování v Pythonu

Pojďme si procvičit!

Vzorkování v Pythonu

Preparing Video For Download...