Generator.negative_binomialは、負の二項分布から乱数配列を生成するジェネレータメソッドです。
負の二項分布は、n回の成功を達成するまでのN回の失敗の確率を表す確率分布です。たとえば、3回1の目が出るまでサイコロを投げるとして、それまでに出る1以外の目の回数の分布が負の二項分布です。
なお二項分布については、以下で解説しています。
ここでは、負の二項分布から乱数配列を生成するGenerator.negative_binomialについて解説します。
1. 書式
書き方:
Generator.negative_binomial(n, p, size=None)
パラメーター:
n: float or array_like of floats 成功回数(>0.) |
p: float or array_like of floats 成功確率(0<p<=1) |
size: int or tuple of ints, optional 出力する配列のshape。デフォルト値のNoneで、nとpが共にスカラーの場合は1つの乱数の値を返す。それ以外の場合は、np.broadcast(n, p).sizeの乱数配列を返す。 |
戻り値:
out: ndarray or scalar パラメータを設定した負の二項分布から乱数配列を生成。それぞれの乱数配列のsizeは、任意の成功回数nと、nを達成するまでの失敗の回数。 |
2. サンプルコード
それでは、サンプルコードを見ていきましょう。
まずは、random.default_rng コンストラクタでジェネレータオブジェクトを作成します。『numpy.random.default_rng – 乱数生成のためのジェネレータオブジェクトの作成』に目を通しておいてください。
import numpy as np
rng = np.random.default_rng()
rng
こうして作成したジェネレータオブジェクト rng に対して、Generator.negative_binomialを呼び出すことによって、負の二項分布から乱数配列を取得することができます。
例えば、以下のコードでは、サイコロで特定の目を3回出すまでの失敗回数を取得しています。
suc = 3 # 成功回数
prob = 1/6 # 成功確率
rng.negative_binomial(suc, prob, 5)
それぞれ、5回, 8回, 2回, 19回, 12回失敗しました。
現実の例に当てはめてみましょう。ある油田発掘会社があるとします。この会社が調査した発掘候補の場所が10万箇所あり、それぞれ0.1(10%)の確率で実際に油田が発掘されると見積もっているとします。それでは、この会社が1つ2つと油田を発掘していくと、次の油田発掘の確率はどのように変化していくでしょうか。
それを計算したものが以下です。
s = np.random.default_rng().negative_binomial(1, 0.1, 100000)
for i in range(1, 11):
probability = sum(s<i) / 100000.
print(i, "石油発見!, 確率 =", probability)
3. まとめ
以上のように、Generator.negative_binomialは、負の二項分布から乱数配列を生成するジェネレータメソッドです。
以前は、numpy.random.negative_binomial関数が使われていましたが、ジェネレータメソッドを使うようにしましょう。こちらの方が、処理が高速で、大量のデータを扱う科学技術計算に適しているからです。
コメント