Generator.chisquare – カイ二乗分布から乱数配列を作成

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

カイ二乗分布は、簡単に言うと、期待値と実現値の食い違いを分布で表したものです。例えば、赤玉と白玉が同数入っている箱から、玉を20回取り出すとします。この場合、期待値としては赤玉と白玉は10個ずつ取り出されると計算できます。しかし、実際は赤玉11個白玉9個というように期待値と実現値は微妙にずれることが多いです。カイ二乗分布は、この期待と実現値のずれを描写するものです。

このページでは、このGenerator.chisquareについて解説します。なお、同じ操作をするのに今までは、np.random.chisquare 関数を使っていましたが、現在ではGenerator.chisquareが推奨されています。

目次

1. 書式

Generator.chisquare

書き方:

Generator.chisquare(df, size=None)

パラメーター:

df: float or array_like of floats
自由度(>0)
size: int or tuple of ints, optioal
出力する配列のshapeを指定。デフォルトのNoneでは乱数を1つ返す。その他の場合は、np.array(df).sizeの乱数を取得。

戻り値: 

out: ndarray or scalar
指定したパラメータのカイ二乗分布から乱数を取得

例外:

ValueError
df <= 0 の時、またはsizeが不適切な時

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 0x7FC59C558318

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

以下のコードでは、自由度1の場合の乱数をカイ二乗分布から10個取得しています。

In [2]:
rng.chisquare(1, 10)
Out[2]:
array([2.60586879e+00, 6.37912383e-01, 8.44920011e-01, 5.05047684e-01,
       1.30604663e+00, 2.20587866e-01, 7.22980448e-01, 2.43880799e-04,
       1.12129388e-01, 1.20316346e+00])

カイ二乗分布では、自由度によって分布の形状が大きく変わります。以下に参考としてヒストグラムを描いておきます。

In [3]:
import matplotlib.pyplot as plt

plt.subplot(221)
s = rng.chisquare(1, 10000)
count, bins, ignored = plt.hist(s, 30, density=True)
plt.title('degree of freedom =1', fontsize=12)

plt.subplot(222)
s = rng.chisquare(3, 10000)
count, bins, ignored = plt.hist(s, 30, density=True)
plt.title('degree of freedom =3', fontsize=12)

plt.subplot(223)
s = rng.chisquare(5, 10000)
count, bins, ignored = plt.hist(s, 30, density=True)
plt.title('degree of freedom =5', fontsize=12)

plt.subplot(224)
s = rng.chisquare(7, 10000)
count, bins, ignored = plt.hist(s, 30, density=True)
plt.title('degree of freedom =7', fontsize=12)

plt.tight_layout()
plt.show()

3. まとめ

以上がGenerator.chisquareです。繰り返しになりますが、これまで使われていたnp.random.chisquare関数は継続して使用可能ですが、Generator.chisquareメソッドを使った方が遥かに高速で科学技術計算に適しています。



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる