Generator.wald – ワルド分布から乱数配列を作成する方法

Generator.waldは、ワルド分布(逆ガウス分布)から乱数配列を生成するジェネレータメソッドです。

ワルド分布は逆ガウス分布としても知られており、広がり(scale)が無限に近づくほど、ガウス分布に近づいていきます。ただし、いくつかの文献では、ワルド分布は平均値1の逆ガウス分布だとされていますが、これは普遍的な法則ではありません。

逆ガウス分布は、ブラウン運動との関係で研究された分布です。逆ガウス分布という名前がついているのは、一定距離にかかる時間と、時間当たりの距離には、逆相関関係があるからです。

ワルド分布(逆ガウス分布)は、ワイブル分布と並んで、株式収益率や利子率のモデリングに使われます。

このページではワルド分布から乱数配列を生成するGenerator.waldについて解説します。

目次

1. 書式

Generator.wald

書き方:

Generator.wald(mean, scale, size=None)

パラメーター:

mean: float or array_like of floats
平均値(>0)
scale: float or array_like of floats
広がり(>0)
size: int or tuple of ints, optional
出力する配列のshape。(m, n, k)を渡すと、shape(m, n, k)の乱数配列を生成する。デフォルト値Noneで、mean, scaleがスカラーの場合は1つの乱数の値を返す。それ以外の場合はnp.broadcast(mean, scale).sizeの乱数配列を返す。

戻り値: 

out: ndarray or scalar
パラメータを設定したワルド分布から乱数配列を生成。

Notes

ワルド分布の確率密度関数は次の通りです。

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

こうして作成したジェネレータオブジェクト rng に対して、Generator.waldを呼び出すことによって、ワルド分布から乱数配列を取得することができます。

第一引数に中央値mean、第二引数に広がりscale、第三引数に配列のsizeを渡します。

In [2]:
rng.wald(3, 2, 5)
Out[2]:
array([0.69606649, 0.34843336, 0.6270492 , 3.7161072 , 2.02251236])

以下に平均値meanが10で、広がりscaleが異なるワルド分布を描いています。scaleが大きくなるほど、正規分布に近づいていきます。

In [3]:
import matplotlib.pyplot as plt
plt.subplot(221)
h = plt.hist(rng.wald(10, 1, 100000), bins=200, density=True)
plt.title('mean=10, scale=1', fontsize=12)

plt.subplot(222)
h = plt.hist(rng.wald(10, 10, 100000), bins=200, density=True)
plt.title('mean=10, scale=10', fontsize=12)

plt.subplot(223)
h = plt.hist(rng.wald(10, 100, 100000), bins=200, density=True)
plt.title('mean=10, scale=100', fontsize=12)

plt.subplot(224)
h = plt.hist(rng.wald(10, 1000, 100000), bins=200, density=True)
plt.title('mean=10, scale=1000', fontsize=12)

plt.tight_layout()
plt.show()

3. まとめ

以上、Generator.waldはワルド分布から乱数配列を生成するジェネレータメソッドです。

以前は、numpy.random.wald関数が使われていましたが、ジェネレータメソッドを使うようにしましょう。こちらの方が、処理が高速で、大量のデータを扱う科学技術計算に適しているからです。



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる