Generator.noncentral_chisquareは、NumPyで非心カイ二乗分布から乱数配列を生成するための、randomモジュールのジェネレータメソッドです。
非心カイ二乗分布は、カイ二乗分布を拡張した確率分布です。後でヒストグラムで示しますが、非心度が小さいほどカイ二乗分布に近くなり、非心度が大きいほど正規分布に近づきます。
なおカイ二乗分布については以下で解説しています。
このページでは、この非心カイ二乗分布から乱数配列を取得するGenerator.noncentral_chisquareについて解説します。
1. 書式
書き方:
Generator.noncentral_chisquare(df, nonc, size=None)
パラメーター:
df: float or array_like of floats 自由度(>0) |
nonc: float or array_like of floats 非心度 |
size: int or tuple of ints, optioal 出力する配列のshape。例えば、(m, n, k)を渡せば、shape(m, n, k)の乱数配列を生成。デフォルト値のNoneで、dfとnoncが共にスカラーの場合は乱数を1つ返す。その他の場合は、np.broadcast(df, nonc).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.noncentral_chisquareを呼び出します。
rng.noncentral_chisquare(3, 20, 5)
ヒストグラムでこの分布を描いてみましょう。
import matplotlib.pyplot as plt
values = plt.hist(rng.noncentral_chisquare(3, 20, 100000),
bins=200, density=True)
plt.show()
以下のヒストグラムで示している通り、非心度が非常に小さい場合、分布はカイ二乗分布とほとんど同じになります。
plt.figure()
values = plt.hist(rng.noncentral_chisquare(3, .0000001, 100000),
bins=np.arange(0., 25, .1), density=True)
values2 = plt.hist(rng.chisquare(3, 100000),
bins=np.arange(0., 25, .1), density=True)
plt.plot(values[1][0:-1], values[0]-values2[0], 'ob')
plt.show()
以下のヒストグラムでは、非心度が非常に大きい場合のものです。左右対象の正規分布に近いものになっていることがわかります。
plt.figure()
values = plt.hist(rng.noncentral_chisquare(3, 100, 100000),
bins=200, density=True)
plt.show()
3.まとめ
以上のように、Generator.noncentral_chisquareは、非心カイ二乗分布から乱数配列を生成するジェネレータメソッドです。
以前は、numpy.random.noncentral_chisquare関数が使われていましたが、ジェネレータメソッドを使うようにしましょう。こちらの方が、処理が高速で、大量のデータを扱う科学技術計算に適しているからです。
コメント