Pythonで確率分布に従う乱数生成

Pythonで確率分布に従う乱数を生成するにはscipy.statsが便利です

from scipy.stats import gamma
from scipy.stats import beta
from scipy.stats import bernoulli
from scipy import stats

import numpy as np

#乱数のseedを設定
np.random.seed(1234)

#ベルヌーイ分布(歪んだコインのコイントス)
print(bernoulli.rvs(0.1, size=10))

#カテゴリカル分布(歪んだサイコロ)
xk = np.arange(7)
pk = (0.1,0.2,0.3,0.4,0.5,0.6,0.7) #仮に1を超えた場合はそれ以降の値は出現しない(この場合は0~3までが生成される)
custm = stats.rv_discrete(name='custm', values=(xk, pk))
print(custm.rvs(size=10))

#ガンマ分布
print(gamma(a=1.0, scale=1.0).rvs(10))

#ベータ分布
print(beta(a=1.0, b=1.0).rvs(10))

参考
https://docs.scipy.org/doc/scipy/reference/stats.html
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_discrete.html#scipy.stats.rv_discrete