numpy.random.Generator.normal#
方法
- random.Generator.normal(loc=0.0, scale=1.0, size=None)#
從常態(高斯)分佈中抽取隨機樣本。
常態分佈的機率密度函數最早由棣莫弗推導出來,200 年後高斯和拉普拉斯也各自獨立推導出來 [2],由於其特徵形狀(請參見以下範例),通常被稱為鐘形曲線。
常態分佈在自然界中經常出現。例如,它描述了受大量微小、隨機擾動影響的樣本的常見分佈,每個擾動都有其獨特的分佈 [2]。
- 參數:
- locfloat 或 floats 的類陣列 (array_like)
分佈的平均值(“中心”)。
- scalefloat 或 floats 的類陣列 (array_like)
分佈的標準差(離散程度或“寬度”)。必須是非負數。
- sizeint 或 ints 的 tuple,選填
輸出形狀。如果給定的形狀是,例如
(m, n, k)
,則會抽取m * n * k
個樣本。如果 size 是None
(預設值),且loc
和scale
都是純量,則會傳回單一值。否則,會抽取np.broadcast(loc, scale).size
個樣本。
- 回傳值:
- outndarray 或 純量
從參數化的常態分佈中抽取的樣本。
另請參閱
scipy.stats.norm
機率密度函數、分佈或累積密度函數等。
註解
高斯分佈的機率密度為
\[p(x) = \frac{1}{\sqrt{ 2 \pi \sigma^2 }} e^{ - \frac{ (x - \mu)^2 } {2 \sigma^2} },\]其中 \(\mu\) 是平均值,\(\sigma\) 是標準差。標準差的平方 \(\sigma^2\) 稱為變異數。
該函數在平均值處達到峰值,其“離散程度”隨著標準差的增加而增加(函數在 \(x + \sigma\) 和 \(x - \sigma\) 處達到其最大值的 0.607 倍 [2])。這表示
normal
更可能傳回接近平均值的樣本,而不是遠離平均值的樣本。參考文獻
[1]維基百科,“常態分佈”,https://en.wikipedia.org/wiki/Normal_distribution
範例
從分佈中抽取樣本
>>> mu, sigma = 0, 0.1 # mean and standard deviation >>> rng = np.random.default_rng() >>> s = rng.normal(mu, sigma, 1000)
驗證平均值和標準差
>>> abs(mu - np.mean(s)) 0.0 # may vary
>>> abs(sigma - np.std(s, ddof=1)) 0.0 # may vary
顯示樣本的直方圖,以及機率密度函數
>>> import matplotlib.pyplot as plt >>> count, bins, _ = plt.hist(s, 30, density=True) >>> plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) * ... np.exp( - (bins - mu)**2 / (2 * sigma**2) ), ... linewidth=2, color='r') >>> plt.show()
來自常態分佈的 2x4 樣本陣列,平均值為 3,標準差為 2.5
>>> rng = np.random.default_rng() >>> rng.normal(3, 2.5, size=(2, 4)) array([[-4.49401501, 4.00950034, -1.81814867, 7.29718677], # random [ 0.39924804, 4.68456316, 4.99394529, 4.84057254]]) # random