Generator.standard_exponential – 標準指数分布の乱数配列を作成する方法

Generator.standard_exponentialは、NumPyのrandomモジュールのジェネレータメソッドで、標準指数分布から乱数配列を精製します。

標準指数分布は、scale(尺度母数)が1の指数分布です。

指数分布は、幾何分布の連続確率であり、さまざまな状況に使われます。たとえば、多数の暴風雨から雨粒の大きさを推定したり、多数のデータからページリクエストにかかる時間を推定したりなどです。言い方を変えると、あるランダムな事象が連続して起きる時間間隔を表しています

ここでは、この指数分布の乱数配列を生成するGenerator.standard_exponentialについて解説します。

なお、任意のscaleを指定できるジェネレータメソッドに、Generator.exponentialがあります。これについては、以下のページで解説しています。

目次

1. 書式

Generator.standard_exponential

書き方:

Generator.standard_exponential(size=None, dtype=np.float64, method='zig', out=None)

パラメーター:

size: int or tuple of ints, optional
出力する配列のshape。例えば、(m, n, k)と渡せば、shape(m, n, k)の乱数配列を取得。デフォルトのNoneでは1つの乱数を返す。
dytpe: dtype, optional
生成する配列の要素の型。float64とfloat32のみ指定可能。デフォルト値はnp.float64。配列の要素の型については、『NumPyのdtype属性の一覧と参照・指定・変更方法』を参照すること。
method: str, optional
‘inv’か’zig’を指定可能。’inv’は、デフォルトのインバースCDFメソッドを使用。’zig’は、それより遥かに速いジグラットメソッドを使用。デフォルト値は’zig’。’inv’を使うことはほぼない。
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 0x7F9A09B5EE58

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

In [2]:
rng.standard_exponential(5)
Out[2]:
array([0.02740352, 2.15527491, 0.72046872, 1.99092403, 0.40792051])

標準指数分布の形状をヒストグラムで確認しておきましょう。

In [3]:
import matplotlib.pyplot as plt
s = rng.standard_exponential(10000)
count, bins, ignored = plt.hist(s, 30, density=True)
plt.show()

3. まとめ

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

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



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる