Generator.noncentral_chisquare – 非心カイ二乗分布から乱数配列を作成する方法

Generator.noncentral_chisquareは、NumPyで非心カイ二乗分布から乱数配列を生成するための、randomモジュールのジェネレータメソッドです。

非心カイ二乗分布は、カイ二乗分布を拡張した確率分布です。後でヒストグラムで示しますが、非心度が小さいほどカイ二乗分布に近くなり、非心度が大きいほど正規分布に近づきます。

なおカイ二乗分布については以下で解説しています。

このページでは、この非心カイ二乗分布から乱数配列を取得するGenerator.noncentral_chisquareについて解説します。

目次

1. 書式

Generator.noncentral_chisquare

書き方:

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

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

こうして作成したジェネレータオブジェクト rng に対して、Generator.noncentral_chisquareを呼び出します。

In [2]:
rng.noncentral_chisquare(3, 20, 5)
Out[2]:
array([ 9.55565346, 21.20280344, 24.31675248, 18.87213734, 17.68534281])

ヒストグラムでこの分布を描いてみましょう。

In [3]:
import matplotlib.pyplot as plt
values = plt.hist(rng.noncentral_chisquare(3, 20, 100000),
                  bins=200, density=True)
plt.show()

以下のヒストグラムで示している通り、非心度が非常に小さい場合、分布はカイ二乗分布とほとんど同じになります。

In [4]:
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()

以下のヒストグラムでは、非心度が非常に大きい場合のものです。左右対象の正規分布に近いものになっていることがわかります。

In [5]:
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関数が使われていましたが、ジェネレータメソッドを使うようにしましょう。こちらの方が、処理が高速で、大量のデータを扱う科学技術計算に適しているからです。



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる