numpy.random.Generator.poisson#

方法

random.Generator.poisson(lam=1.0, size=None)#

從 Poisson 分佈中抽取樣本。

Poisson 分佈是大 N 時二項式分佈的極限。

參數:
lamfloat 或 float 的類陣列 (array_like)

固定時間間隔內發生的事件的期望數量,必須 >= 0。序列必須可廣播到請求的大小。

sizeint 或 int 的 tuple,選用

輸出形狀。如果給定的形狀是,例如, (m, n, k),則會抽取 m * n * k 個樣本。如果 size 是 None (預設),如果 lam 是純量,則傳回單一值。否則,會抽取 np.array(lam).size 個樣本。

傳回值:
outndarray 或 純量

從參數化的 Poisson 分佈中抽取的樣本。

註解

Poisson 分佈的機率質量函數 (PMF) 為

\[f(k; \lambda)=\frac{\lambda^k e^{-\lambda}}{k!}\]

對於期望間隔為 \(\lambda\) 的事件,Poisson 分佈 \(f(k; \lambda)\) 描述在觀察到的間隔 \(\lambda\) 內發生 \(k\) 個事件的機率。

由於輸出限制在 C int64 類型的範圍內,因此當 lam 在最大可表示值的 10 個 sigma 範圍內時,會引發 ValueError。

參考文獻

[1]

Weisstein, Eric W. “Poisson Distribution.” From MathWorld–A Wolfram Web Resource. https://mathworld.wolfram.com/PoissonDistribution.html

[2]

Wikipedia, “Poisson distribution”, https://en.wikipedia.org/wiki/Poisson_distribution

範例

從分佈中抽取樣本

>>> rng = np.random.default_rng()
>>> lam, size = 5, 10000
>>> s = rng.poisson(lam=lam, size=size)

驗證平均值和變異數,應約為 lam

>>> s.mean(), s.var()
(4.9917 5.1088311)  # may vary

顯示直方圖和機率質量函數

>>> import matplotlib.pyplot as plt
>>> from scipy import stats
>>> x = np.arange(0, 21)
>>> pmf = stats.poisson.pmf(x, mu=lam)
>>> plt.hist(s, bins=x, density=True, width=0.5)
>>> plt.stem(x, pmf, 'C1-')
>>> plt.show()
../../../_images/numpy-random-Generator-poisson-1_00_00.png

為 lambda 100 和 500 各抽取 100 個值

>>> s = rng.poisson(lam=(100., 500.), size=(100, 2))