Generator.exponential – 指数分布から乱数配列を作成する方法

Generator.exponentialは、NumPyのrandomモジュールのジェネレータメソッドで、指数分布から乱数配列を精製します。

指数分布は、幾何分布の連続確率であり、さまざまな状況に使われます。たとえば、多数の暴風雨から雨粒の大きさを推定したり、多数のデータからページリクエストにかかる時間を推定したりなどです。言い方を変えると、あるランダムな事象が連続して起きる時間間隔を表しています

ここでは、この指数分布の乱数配列を生成するGenerator.exponentialについて解説します。

目次

1. 書式

Generator.exponential

書き方:

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 – 乱数生成のためのジェネレータオブジェクトの作成』に目を通しておいてください。

In [1]:
import numpy as np
rng = np.random.default_rng()
rng
Out[1]:
Generator(PCG64) at 0x7FA0A6B88D68

こうして作成したジェネレータオブジェクト rng に対して、Generator.exponentialを呼び出します。その際、第一引数にscale、第二引数にsizeを渡します。

引数に何も渡さない場合は、scale=1.0の指数分布から乱数を1つ返します。

In [2]:
rng.exponential()
Out[2]:
0.17885332427860218

異なるscaleとsizeを指定してみましょう。

In [3]:
rng.exponential(0.25, 5)
Out[3]:
array([0.17024324, 0.05725345, 0.0017562 , 0.26407975, 0.07132168])

指数分布はscaleによって、形状が異なります。以下に描画しておきます。

In [4]:
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メソッドを使った方が遥かに高速で科学技術計算に適しています。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる