Generator.exponentialは、NumPyのrandomモジュールのジェネレータメソッドで、指数分布から乱数配列を精製します。
指数分布は、幾何分布の連続確率であり、さまざまな状況に使われます。たとえば、多数の暴風雨から雨粒の大きさを推定したり、多数のデータからページリクエストにかかる時間を推定したりなどです。言い方を変えると、あるランダムな事象が連続して起きる時間間隔を表しています
ここでは、この指数分布の乱数配列を生成するGenerator.exponentialについて解説します。
1. 書式
書き方:
Generator.exponential(scale=1.0, size=None)
パラメーター:
scale: float or array_like of floats スケール(尺度母数), β=1/λ |
size: int or tuple of ints, optional 出力する配列のshape。デフォルトのNoneでは、scaleがスカラーの場合は1つの乱数を、それ以外の場合は、np.array(scale).sizeの乱数を返す。 |
戻り値:
out: ndarray or scalar 指定のパラメータの指数分布からの乱数 |
2. サンプルコード
まずは、random.default_rng コンストラクタでジェネレータオブジェクトを作成します。『numpy.random.default_rng – 乱数生成のためのジェネレータオブジェクトの作成』に目を通しておいてください。
import numpy as np
rng = np.random.default_rng()
rng
こうして作成したジェネレータオブジェクト rng に対して、Generator.exponentialを呼び出します。その際、第一引数にscale、第二引数にsizeを渡します。
引数に何も渡さない場合は、scale=1.0の指数分布から乱数を1つ返します。
rng.exponential()
異なるscaleとsizeを指定してみましょう。
rng.exponential(0.25, 5)
指数分布はscaleによって、形状が異なります。以下に描画しておきます。
import matplotlib.pyplot as plt
plt.title("scale = 0.25:blue, 0.5:orange, 0.75:green, 1.:red")
# scale = 1
s = rng.exponential(0.25, 10000)
count, bins, ignored = plt.hist(s, 30, density=True)
# scale = 2
s = rng.exponential(0.5, 10000)
count, bins, ignored = plt.hist(s, 30, density=True)
# scale = 3
s = rng.exponential(0.75, 10000)
count, bins, ignored = plt.hist(s, 30, density=True)
# scale = 4
s = rng.exponential(1., 10000)
count, bins, ignored = plt.hist(s, 30, density=True)
plt.show()
3. まとめ
以上のように、Generator.exponentialは指数分布から乱数配列を生成するジェネレータメソッドです。
これまで使われていたnp.random.exponential関数は継続して使用可能ですが、Generator.exponentialtメソッドを使った方が遥かに高速で科学技術計算に適しています。
コメント