numpy.random.gamma – ガンマ分布から乱数配列を生成

numpy.random.gammaは、ガンマ分布から乱数を生成する関数です。このページでは、この関数の使い方について解説します。

重要
NumPyのversion1.17以降は、乱数操作には、関数は使わずにジェネレータメソッドを使うようになりました。最大の理由は、ジェネレータから乱数を生成する方が遥かに高速であり、科学技術計算に適しているからです。そのため、現在はrandom.gamma関数の使用は推奨されておらず、代わりにGenerator.gammaメソッドを使います。これについては『Generator.gamma – ガンマ分布から乱数配列を生成』で解説しています。

目次

1. 書式

numpy.random.gamma

書き方:

np.random.gamma(shape, scale=1.0, size=None)

パラメーター:

shape: float or array_like of floats
ガンマ分布の形状を指定する。負の数は不可。値が大きいほど正規分布に近づく。※ガンマ分布ではshape * scale = mean(平均値)
scale: float or array_like of floats, optional
ガンマ分布のスケール(縮尺)を指定する。負の値は付加。デフォルトは1.0。※ガンマ分布ではshape * scale = mean(平均値)
size: int or tuple of ints, optional
出力する配列のshapeを指定する。デフォルト値のNoneの場合で、かつ、shapeとscaleがともにスカラーの場合、1つの乱数の値を返す。それ以外の場合は、np.broadcast(shape, scale).sizeの乱数を生成する。(参考:『NumPyのshape属性 – 配列の形状の確認と変更』)

戻り値: 

out: ndarray or scalar
指定した範囲のガンマ分布からの乱数を出力する。

一緒に確認したい関数:

  • Generator.gamma: ジェネレータメソッド。今後はrandom.gammaではなく、こちらを使うこと。
  • scipy.stats.gamma: 確率密度関数や累積分布関数など

ガンマ分布とは

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

In [1]:
import numpy as np
import matplotlib.pyplot as plt
import scipy.special as sps  
shape, scale = 2., 2. 
s = np.random.gamma(shape, scale, 1000)
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()

2. サンプルコード

shapeとscaleだけを指定した場合、そのガンマ分布から、乱数を1つ生成します。scaleは必須引数ではありません。scaleを指定しない場合のデフォルト値は1です。

なお、ガンマ分布ではshape*scale=mean(平均値)です。

In [1]:
import numpy as np
np.random.gamma(1, 1)
# >>> ガンマ分布は shape*scale = mean
Out[1]:
0.17919352377316775

第三引数で、出力する配列の形状を指定します。

In [2]:
np.random.gamma(5, 2, 5)
#  >>>shape5, scale2, mean10
Out[2]:
array([4.90711521, 5.43192121, 7.25732828, 5.3379471 , 5.911442  ])

二次元配列以上で出力したい場合は、第三引数をタプルで渡します。

In [3]:
np.random.gamma(5, 2, (5, 2))
Out[3]:
array([[ 9.69300344,  7.12200395],
       [12.42744713, 10.52624605],
       [10.98244233, 10.14847041],
       [14.34346239, 20.28394411],
       [13.51278784,  8.8955086 ]])

3. まとめ

以上がnumpy.random.gammaです。この関数は指数分布から乱数配列を生成する際に使います。ただし、現在ではGenerator.gammaメソッドの使用が推奨です。今後は、後者を利用するようにしましょう。



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる