Generator.logseriesは、対数分布から乱数配列を生成するジェネレータメソッドです。
対数分布は、種の多様性や発生を表す分布として頻繁に使われます。また、車の乗車人数のモデルとしても使われます。
ここでは、対数分布から乱数配列を生成するGenerator.logseriesについて解説します。
1. 書式
書き方:
Generator.logseries(p, size=None)
パラメーター:
p: float or array_like of floats 分布の形状を指定するパラメータ(0<p<1) |
size: int or tuple of ints, optional 出力する配列のshapeを指定する。デフォルト値のNoneの場合で、pがスカラーの場合、1つの乱数の値を返す。それ以外の場合は、np.array(p).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.logseriesを呼び出すことによって、対数分布から乱数配列を取得することができます。
第一引数にパラメータp、第二引数にsizeを指定します。
rng.logseries(.8, 5)
異なるpを指定した場合の、確率密度関数とヒストグラムを確認しておきましょう。対数分布は次のような形状をしています。
import matplotlib.pyplot as plt
def logseries(k, p):
return -p**k/(k*np.log(1-p))
plt.subplot(221)
a = .2
s = rng.logseries(a, 10000)
count, bins, ignored = plt.hist(s)
plt.plot(bins, logseries(bins, a) * count.max()/
logseries(bins, a).max(), 'r')
plt.title('a=.2', fontsize=12)
plt.subplot(222)
a = .4
s = rng.logseries(a, 10000)
count, bins, ignored = plt.hist(s)
plt.plot(bins, logseries(bins, a) * count.max()/
logseries(bins, a).max(), 'r')
plt.title('a=.4', fontsize=12)
plt.subplot(223)
a = .6
s = rng.logseries(a, 10000)
count, bins, ignored = plt.hist(s)
plt.plot(bins, logseries(bins, a) * count.max()/
logseries(bins, a).max(), 'r')
plt.title('a=.6', fontsize=12)
plt.subplot(224)
a = .8
s = rng.logseries(a, 10000)
count, bins, ignored = plt.hist(s)
plt.plot(bins, logseries(bins, a) * count.max()/
logseries(bins, a).max(), 'r')
plt.title('a=.8', fontsize=12)
plt.tight_layout()
plt.show()
3. まとめ
以上のように、Generator.logseriesは、対数分布から乱数配列を生成するジェネレータメソッドです。
以前は、numpy.random.logseries関数が使われていましたが、ジェネレータメソッドを使うようにしましょう。こちらの方が、処理が高速で、大量のデータを扱う科学技術計算に適しているからです。
コメント