Generator.rayleighは、レイリー分布から乱数配列を生成するジェネレータメソッドです。
たとえば東向きの風速と北向きの風速が、同一の平均値0のガウス分布である時、風速はレイリー分布に従うと考えられます。ワイブル分布は、レイリー分布の汎化です。
このページではレイリー分布から乱数配列を生成するGenerator.rayleighについて解説します。
1. 書式
書き方:
Generator.rayleigh(scale=1.0, size=None)
パラメーター:
scale: float or array_like of floats スケールであり最頻値。デフォルト値は1。 |
size: int or tuple of ints, optional 出力する配列のshape。(m, n, k)を渡すと、shape(m, n, k)の乱数配列を生成する。デフォルト値Noneで、scaleがスカラーの場合は1つの乱数の値を返す。それ以外の場合はnp.array(scale).sizeの乱数配列を返す。 |
戻り値:
out: ndarray or scalar パラメータを設定したレイリー分布から乱数配列を生成。 |
Notes
レイリー分布の確率密度関数は次の通りです。
2. サンプルコード
それでは、サンプルコードを見ていきましょう。
まずは、random.default_rng コンストラクタでジェネレータオブジェクトを作成します。『numpy.random.default_rng – 乱数生成のためのジェネレータオブジェクトの作成』に目を通しておいてください。
import numpy as np
rng = np.random.default_rng()
rng
こうして作成したジェネレータオブジェクト rng に対して、Generator.rayleighを呼び出すことによって、レイリー分布から乱数配列を取得することができます。
第一引数に最頻値であるscaleを、第二引数に出力する配列のshapeを渡します。
rng.rayleigh(3, 5)
以下のヒストグラムは、レイリー分布をプロットしたものです。
from matplotlib.pyplot import hist
values = hist(rng.rayleigh(3, 100000), bins=200, density=True)
波の高さはレイリー分布に従う傾向があります。もし、平均の波高が1mであるなら、3m以上の波が発生する確率はどれぐらいあるでしょうか。以下のコードで確認することができます。
meanvalue = 1
modevalue = np.sqrt(2 / np.pi) * meanvalue
s = rng.rayleigh(modevalue, 1000000)
100.*sum(s>3)/1000000.
約9.2%ほどですね。
3.まとめ
以上のように、Generator.rayleighは、レイリー分布から乱数配列を生成するジェネレータメソッドです。
以前は、numpy.random.rayleigh関数が使われていましたが、ジェネレータメソッドを使うようにしましょう。こちらの方が、処理が高速で、大量のデータを扱う科学技術計算に適しているからです。
コメント