numpy.random.RandomState.zipf#
方法
- random.RandomState.zipf(a, size=None)#
從齊夫分佈中抽取樣本。
樣本是從指定參數 a > 1 的齊夫分佈中抽取的。
齊夫分佈(也稱為 zeta 分佈)是一種離散機率分佈,符合齊夫定律:一個項目的頻率與其在頻率表中的排名成反比。
- 參數:
- afloat 或 float 的 array_like 物件
分佈參數。必須大於 1。
- sizeint 或 int 元組,可選
輸出形狀。如果給定的形狀是例如
(m, n, k)
,則會抽取m * n * k
個樣本。如果 size 是None
(預設值),如果a
是純量,則會傳回單一值。否則,會抽取np.array(a).size
個樣本。
- 傳回值:
- outndarray 或純量
從參數化的齊夫分佈中抽取的樣本。
另請參閱
scipy.stats.zipf
機率密度函數、分佈或累積密度函數等。
random.Generator.zipf
新程式碼應使用的方法。
註解
齊夫分佈的機率質量函數 (PMF) 為
\[p(k) = \frac{k^{-a}}{\zeta(a)},\]對於整數 \(k \geq 1\),其中 \(\zeta\) 是黎曼 zeta 函數。
它以美國語言學家喬治·金斯利·齊夫的名字命名,他注意到一種語言樣本中任何單字的頻率與其在頻率表中的排名成反比。
參考文獻
[1]Zipf, G. K., “Selected Studies of the Principle of Relative Frequency in Language,” Cambridge, MA: Harvard Univ. Press, 1932.
範例
從分佈中抽取樣本
>>> a = 4.0 >>> n = 20000 >>> s = np.random.zipf(a, n)
顯示樣本的直方圖,以及基於機率密度函數的預期直方圖
>>> import matplotlib.pyplot as plt >>> from scipy.special import zeta
bincount
為小整數提供快速直方圖。>>> count = np.bincount(s) >>> k = np.arange(1, s.max() + 1)
>>> plt.bar(k, count[1:], alpha=0.5, label='sample count') >>> plt.plot(k, n*(k**-a)/zeta(a), 'k.-', alpha=0.5, ... label='expected count') >>> plt.semilogy() >>> plt.grid(alpha=0.4) >>> plt.legend() >>> plt.title(f'Zipf sample, a={a}, size={n}') >>> plt.show()