本文簡要介紹 python 語言中 scipy.stats.rvs_ratio_uniforms
的用法。
用法:
scipy.stats.rvs_ratio_uniforms(pdf, umax, vmin, vmax, size=1, c=0, random_state=None)
使用 ratio-of-uniforms 方法從概率密度函數生成隨機樣本。
- pdf: 可調用的
具有簽名 pdf(x) 的函數,與分布的概率密度函數成比例。
- umax: 浮點數
u-direction 中邊界矩形的上限。
- vmin: 浮點數
v-direction 中邊界矩形的下界。
- vmax: 浮點數
v-direction 中邊界矩形的上限。
- size: int 或整數元組,可選
定義隨機變量的數量(默認為 1)。
- c: 浮點數,可選。
ratio-of-uniforms 方法的移位參數,請參見注釋。默認值為 0。
- random_state: {無,整數,
numpy.random.Generator
, numpy.random.RandomState
}, optional如果種子是無(或np.random), 這
numpy.random.RandomState
使用單例。如果種子是一個 int,一個新的RandomState
使用實例,播種種子.如果種子已經是一個Generator
或者RandomState
實例然後使用該實例。
- rvs: ndarray
隨機變量根據 pdf 定義的概率分布分布。
參數:
返回:
注意:
給定一個單變量概率密度函數pdf和一個常數c, 定義集合
A = {(u, v) : 0 < u <= sqrt(pdf(v/u + c))}
.如果(紫外線)是一個均勻分布的隨機向量A, 然後V/U + c遵循一個分布pdf.上述結果(見[1],[2]) 可用於僅使用 pdf 對隨機變量進行采樣,即不需要 cdf 的反轉。的典型選擇c是零或模式pdf.套裝A是矩形的子集
R = [0, umax] x [vmin, vmax]
其中umax = sup sqrt(pdf(x))
vmin = inf (x - c) sqrt(pdf(x))
vmax = sup (x - c) sqrt(pdf(x))
特別是,這些值是有限的,如果pdf是有界的並且
x**2 * pdf(x)
是有界的(即次二次尾部)。一個可以生成(紫外線)一致地R並返回V/U + c如果(紫外線)也在A可以直接驗證。如果對於任何常數 k > 0 將 pdf 替換為 k * pdf,則算法不會改變。因此,通過刪除不必要的歸一化因子來使用與概率密度函數成比例的函數通常很方便。
直觀地說,如果A填滿大部分封閉矩形,使得概率很高(紫外線)在於A每當它位於R因為否則所需的迭代次數會變得太大。更準確地說,請注意要繪製的預期迭代次數(紫外線)均勻分布在R這樣(紫外線)也在A由比率給出
area(R) / area(A) = 2 * umax * (vmax - vmin) / area(pdf)
,其中麵積(pdf)是積分pdf(如果使用概率密度函數,則等於一,但如果使用與密度成比例的函數,則可以取其他值)。等式成立,因為麵積A等於 0.5 * 麵積(pdf)(定理 7.1 in[1])。如果采樣在 50000 次迭代後未能生成單個隨機變量(即沒有一次抽簽在A),引發異常。如果未正確指定邊界矩形(即,如果它不包含A),算法從不同於下式給出的分布中采樣pdf.因此,建議執行測試,例如scipy.stats.kstest作為支票。
參考:
L. Devroye,“非均勻隨機變量生成”,Springer-Verlag,1986 年。
W. Hoermann 和 J. Leydold,“生成廣義逆高斯隨機變量”,統計與計算,24(4),p。 547-557,2014 年。
A.J. Kinderman 和 J.F. Monahan,“使用均勻偏差比率的隨機變量的計算機生成”,ACM Transactions on Mathematical Software,3(3),p。 257-260,1977。
1 (1,2):
2:
3:
例子:
>>> from scipy import stats >>> rng = np.random.default_rng()
模擬正態分布的隨機變量。在這種情況下,很容易顯式地計算邊界矩形。為簡單起見,我們刪除了密度的歸一化因子。
>>> f = lambda x: np.exp(-x**2 / 2) >>> v_bound = np.sqrt(f(np.sqrt(2))) * np.sqrt(2) >>> umax, vmin, vmax = np.sqrt(f(0)), -v_bound, v_bound >>> rvs = stats.rvs_ratio_uniforms(f, umax, vmin, vmax, size=2500, ... random_state=rng)
K-S 檢驗確認隨機變量確實是正態分布的(正態性在 5% 顯著性水平上不被拒絕):
>>> stats.kstest(rvs, 'norm')[1] 0.250634764150542
index 分布提供了另一個可以明確確定邊界矩形的示例。
>>> rvs = stats.rvs_ratio_uniforms(lambda x: np.exp(-x), umax=1, ... vmin=0, vmax=2*np.exp(-1), size=1000, ... random_state=rng) >>> stats.kstest(rvs, 'expon')[1] 0.21121052054580314
相關用法
- Python SciPy stats.rv_histogram用法及代碼示例
- Python SciPy stats.rv_discrete用法及代碼示例
- Python SciPy stats.rv_continuous用法及代碼示例
- Python SciPy stats.rayleigh用法及代碼示例
- Python SciPy stats.rankdata用法及代碼示例
- Python SciPy stats.recipinvgauss用法及代碼示例
- Python SciPy stats.rice用法及代碼示例
- Python SciPy stats.random_correlation用法及代碼示例
- Python SciPy stats.ranksums用法及代碼示例
- Python SciPy stats.relfreq用法及代碼示例
- Python SciPy stats.randint用法及代碼示例
- Python SciPy stats.rdist用法及代碼示例
- Python SciPy stats.iqr用法及代碼示例
- Python SciPy stats.genpareto用法及代碼示例
- Python SciPy stats.skewnorm用法及代碼示例
- Python SciPy stats.cosine用法及代碼示例
- Python SciPy stats.norminvgauss用法及代碼示例
- Python SciPy stats.invwishart用法及代碼示例
- Python SciPy stats.bartlett用法及代碼示例
- Python SciPy stats.levy_stable用法及代碼示例
- Python SciPy stats.page_trend_test用法及代碼示例
- Python SciPy stats.itemfreq用法及代碼示例
- Python SciPy stats.exponpow用法及代碼示例
- Python SciPy stats.gumbel_l用法及代碼示例
- Python SciPy stats.chisquare用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.stats.rvs_ratio_uniforms。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。