rng.random()
では0以上1未満(これを \([0, 1)\) と書く)の乱数が得られます.乱数を1つ取得するには次のように記述します.
import numpy as np
rng = np.random.default_rng()
rng.random()
0.7510424357302106
配列形式で複数の乱数を取得したい場合には引数にその個数を記述します.例えば20個の乱数を取得します.
rng.random(20)
array([0.61910879, 0.45506578, 0.40584214, 0.5747741 , 0.34110944, 0.03337927, 0.63102066, 0.97748876, 0.0469746 , 0.10357471, 0.36831045, 0.51496081, 0.49989874, 0.85418164, 0.82197086, 0.43439924, 0.51936752, 0.28139332, 0.70604489, 0.68540668])
行列形式で乱数を取得することも可能です.例えば5行4列の行列形式で乱数を発生させます.
rng.random((5, 4))
array([[0.66690272, 0.71264989, 0.56193543, 0.88833542], [0.41937717, 0.35458837, 0.9833979 , 0.38010772], [0.27829787, 0.59289146, 0.67608182, 0.4518037 ], [0.96588848, 0.28687974, 0.32735673, 0.96304148], [0.23311186, 0.56081599, 0.75079351, 0.3288013 ]])
rng.random()
では \([0, 1)\) の乱数が得られるが,\([a, b)\) となる一様乱数は次の式で得られることに注意してください.
例えば,10以上 20未満の一様乱数は次のようにすると得られます.
a = 10.
b = 20.
(b - a) * rng.random(20) + a
array([17.38317556, 15.89043445, 12.47497242, 16.49860675, 19.39795095, 14.01733527, 10.6437123 , 14.88071486, 17.15653046, 16.16725056, 17.17762184, 18.78073906, 13.4718312 , 12.86551775, 10.90441749, 19.3545728 , 13.61795001, 14.7539568 , 13.31334217, 12.41434622])
正規分布に従う乱数を生成するには rng.normal(loc=0.0, scale=1.0, size=None)
が利用できます.ここで,引数の loc=0.0
は平均,scale=1.0
は標準偏差です.
たとえば,平均0,標準偏差1の標準正規分布に従う10個の乱数を生成してみます.
import numpy as np
rng = np.random.default_rng()
mu = 0
sigma = 1
rng = np.random.default_rng()
rng.normal(mu, sigma, 10)
array([-2.09957975, -0.60196235, 0.95884905, -0.50298942, 0.97088488, 1.04152109, -1.60688527, 0.14234796, -0.6607533 , -0.74848114])
平均20,標準偏差3の正規乱数を1000個生成し,ヒストグラムを描いてみます.
import matplotlib.pyplot as plt
from IPython.display import set_matplotlib_formats
# from matplotlib_inline.backend_inline import set_matplotlib_formats # バージョンによってはこちらを有効に
set_matplotlib_formats('retina')
mu = 20
sigma = 3
rng = np.random.default_rng()
x = rng.normal(mu, sigma, 1000)
# ヒストグラムを描く
fig, ax = plt.subplots(1, 1, figsize=(6, 4))
ax.hist(x, bins=15)
# plt.savefig('rng-normal.png', dpi=300, facecolor='white')
plt.show()
指数分布に従う乱数を発生させるには rng.exponential(scale=1.0)
が利用できます.このとき,scale=1.0
は平均です.つまり,次の1つ目の式にあるパラメータ \(\lambda\) ではなく,2つ目の式にある\(\beta = \frac{1}{\lambda}\) を指定することになります.
平均10の指数乱数を20個発生させてみます.
import numpy as np
rng = np.random.default_rng()
beta = 10 # 平均
rng.exponential(beta, 20)
array([ 2.79433895, 8.9634677 , 15.72659852, 1.31914157, 8.51271876, 11.68924967, 3.68749529, 8.32294057, 20.79189747, 6.5146796 , 13.43601827, 2.67192947, 0.13566797, 7.04711664, 21.96355673, 3.40537485, 11.87978411, 8.11521344, 25.40077768, 2.92818262])
平均10の指数乱数を1000個発生させてヒストグラムを描いてみます.
import matplotlib.pyplot as plt
from IPython.display import set_matplotlib_formats
# from matplotlib_inline.backend_inline import set_matplotlib_formats # バージョンによってはこちらを有効に
set_matplotlib_formats('retina')
beta = 10 # 平均
rng = np.random.default_rng()
x = rng.exponential(beta, 1000)
# ヒストグラムを描く
fig, ax = plt.subplots(1, 1, figsize=(6, 4))
ax.hist(x, bins=50)
# plt.savefig('rng-exponential.png', dpi=300, facecolor='white')
plt.show()