Generator.standard_gamma – 標準ガンマ分布から乱数配列を作成する方法

Generator.standard_gammaは、標準ガンマ分布から乱数配列を生成するジェネレータメソッドです。

標準ガンマ分布とは、scale(広がり)が1のガンマ分布のことです。

ガンマ分布とは、簡単に言うと、ある一定の期間に1回起こるランダムな事象がn回起こるまでの時間の分布を示したものです。たとえば、電子部品の寿命の分布や、通信の待ち時間の分布などに使われます。

このページでは、このGenerator.standard_gammaメソッドについて解説します。

なお任意のscaleのガンマ分布からの乱数を取得するには、Generator.gammaメソッドを使います。以下のページで解説しています。

目次

1. 書式

Generator.standard_gamma

書き方:

Generator.standard_gamma(shape, size=None, dtype=np.float64, out=None)

パラメーター:

shape: float or array_like of floats
標準ガンマ分布の形状を指定する。負の数は不可。値が大きいほど正規分布に近づく。※標準ガンマ分布ではshape = mean(平均値)
size: int or tuple of ints, optional
出力する配列のshapeを指定する。デフォルト値のNoneの場合で、かつ、shapeとscaleがともにスカラーの場合、1つの乱数の値を返す。それ以外の場合は、np.broadcast(shape, scale).sizeの乱数を生成する。(参考:『NumPyのshape属性 – 配列の形状の確認と変更』)
dytpe: dtype, optional
生成する配列の要素の型。float64とfloat32のみ指定可能。デフォルト値はnp.float64。配列の要素の型については、『NumPyのdtype属性の一覧と参照・指定・変更方法』を参照すること。
out: ndarray, optional
ここで指定した配列に、ジェネレータメソッドで生成する配列を代入する。両方のshapeが合致している必要がある。

戻り値: 

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

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

第一引数にshape、第二引数にsizeを渡します。

In [2]:
rng.standard_gamma(2., 5)
Out[2]:
array([1.66040986, 0.81729393, 2.85242875, 0.26096036, 1.24450398])

標準ガンマ分布のヒストグラムと確率密度関数を確認しておきましょう。

In [3]:
shape, scale = 2., 1.
s = rng.standard_gamma(shape, 1000000)

import matplotlib.pyplot as plt
import scipy.special as sps  
count, bins, ignored = plt.hist(s, 50, density=True)
y = bins**(shape-1) * ((np.exp(-bins/scale))/  
                      (sps.gamma(shape) * scale**shape))
plt.plot(bins, y, linewidth=2, color='r')  
plt.show()

3. まとめ

以上のように、Generator.standard_gammaは標準ガンマ分布から乱数配列を生成するジェネレータメソッドです。これとは別に任意のscaleの指数分布を設定できるものに、『Generator.gamma – ガンマ分布から乱数配列を生成』があります。

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



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる