Generator.weibullは、ワイブル分布から乱数配列を生成するジェネレータメソッドです。
ワイブル分布は、一般化極値分布の一つで、極値問題のモデリングに使われます。具体的には、時間に対する劣化現象や寿命を統計的に記述するためによく使われます。
なお、一般化極値分布には、他にガンベル分布やフレシェ分布(逆ワイブル分布)があります。
このページではワイブル分布から乱数配列を生成するGenerator.weibullについて解説します。
1. 書式
書き方:
Generator.weibull(a, size=None)
パラメーター:
a: float or array_like of floats 分布の形状パラメータ |
size: int or tuple of ints, optional 出力する配列のshape。(m, n, k)を渡すと、shape(m, n, k)の乱数配列を生成する。デフォルト値Noneで、aがスカラーの場合は1つの乱数の値を返す。それ以外の場合はnp.array(a).sizeの乱数配列を返す。 |
戻り値:
out: ndarray or scalar パラメータを設定したワイブル分布から乱数配列を生成。 |
Notes
ワイブル分布の確率密度関数は次の通りです。
αがshapeで、λがscaleです。関数の最頻値は以下の式で求められます。
a=1 の時、ワイブル分布は指数分布に低減します。
2. サンプルコード
それでは、サンプルコードを見ていきましょう。
まずは、random.default_rng コンストラクタでジェネレータオブジェクトを作成します。『numpy.random.default_rng – 乱数生成のためのジェネレータオブジェクトの作成』に目を通しておいてください。
import numpy as np
rng = np.random.default_rng()
rng
こうして作成したジェネレータオブジェクト rng に対して、Generator.weibullを呼び出すことによって、ワイブル分布から乱数配列を取得することができます。
第一引数にαを、第二引数に配列のsizeを渡します。
rng.weibull(5., 5)
生成した乱数のヒストグラムと、確率密度関数を描いてみましょう。
a = 5.
import matplotlib.pyplot as plt
x = np.arange(1,100.)/50.
def weib(x,n,a):
return (a / n) * (x / n)**(a - 1) * np.exp(-(x / n)**a)
count, bins, ignored = plt.hist(rng.weibull(5.,1000))
x = np.arange(1,100.)/50.
scale = count.max()/weib(x, 1., 5.).max()
plt.plot(x, weib(x, 1., 5.)*scale)
plt.show()
ワイブル分布は、αが1に近づくほど指数分布に近づいていきます。
import matplotlib.pyplot as plt
plt.subplot(221)
count, bins, ignored = plt.hist(rng.weibull(1.,10000))
plt.title('a=1.', fontsize=12)
plt.subplot(222)
count, bins, ignored = plt.hist(rng.weibull(5.,10000))
plt.title('a=5.', fontsize=12)
plt.subplot(223)
count, bins, ignored = plt.hist(rng.weibull(20.,10000))
plt.title('a=20.', fontsize=12)
plt.subplot(224)
count, bins, ignored = plt.hist(rng.weibull(50.,10000))
plt.title('a=50.', fontsize=12)
plt.tight_layout()
plt.show()
3. まとめ
以上、Generator.weibullはワイブル分布から乱数配列を生成するジェネレータメソッドです。
以前は、numpy.random.weibull関数が使われていましたが、ジェネレータメソッドを使うようにしましょう。こちらの方が、処理が高速で、大量のデータを扱う科学技術計算に適しているからです。
コメント