Pseudoslumpmässig talgenerering

Sampling i Python

James Chapman

Curriculum Manager, DataCamp

Vad betyder slumpmässig?

{adjective} gjord, utförd, inträffad eller vald utan metod eller medvetet beslut.

1 Oxford Languages
Sampling i Python

Äkta slumptal

  • Genereras från fysiska processer, som myntkastning
  • Hotbits använder radioaktivt sönderfall
  • RANDOM.ORG använder atmosfäriskt brus
  • Äkta slumpmässighet är kostsamt
1 https://www.fourmilab.ch/hotbits 2 https://www.random.org
Sampling i Python

Pseudoslumpmässig talgenerering

  • Pseudoslumpmässig talgenerering är billig och snabb
  • Nästa "slumptal" beräknas från föregående "slumptal"
  • Det första "slumptalet" beräknas från ett frö
  • Samma frövärde ger alltid samma slumptal
Sampling i Python

Exempel på pseudoslumpmässig talgenerering

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

Funktioner för slumptalgenerering

  • Inled med numpy.random, t.ex. numpy.random.beta()
funktion fördelning funktion fördelning
.beta Beta .hypergeometric Hypergeometrisk
.binomial Binomial .lognormal Lognormal
.chisquare Kji-kvadrat .negative_binomial Negativ binomial
.exponential Exponential .normal Normal
.f F .poisson Poisson
.gamma Gamma .standard_t t
.geometric Geometrisk .uniform Likformig
Sampling i Python

Visualisering av slumptal

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

Sampling i Python

Frön för slumptal

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 i Python

Använda ett annat frö

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 i Python

Nu kör vi en övning!

Sampling i Python

Preparing Video For Download...