本文簡要介紹 python 語言中 scipy.stats.sampling.SimpleRatioUniforms
的用法。
用法:
class scipy.stats.sampling.SimpleRatioUniforms(dist, *, mode=None, pdf_area=1, domain=None, cdf_at_mode=None, random_state=None)#
簡單的Ratio-of-Uniforms (SROU) 方法。
SROU 基於ratio-of-uniforms 方法,該方法使用通用不等式來構造(通用)邊界矩形。它適用於帶有
T(x) = -1/sqrt(x)
的 T-concave 發行版。該方法的主要優點是快速設置。如果人們反複需要生成具有不同形狀參數的分布的小到中等樣本,這將是有益的。在這種情況下,NumericalInverseHermite
或NumericalInversePolynomial
的設置步驟將導致性能不佳。- dist: 對象
具有
pdf
方法的類的實例。pdf
:分布的PDF。 PDF 的簽名應為:def pdf(self, x: float) -> float
.即 PDF 應該接受 Python 浮點數並返回一個 Python 浮點數。它不需要集成到 1,即 PDF 不需要被規範化。如果不歸一化,pdf_area應設置為 PDF 下的區域。
- mode: 浮點數,可選
(精確)分布模式。當模式為
None
時,使用慢速數值例程來近似它。默認為None
。- pdf_area: 浮點數,可選
PDF 下的區域。可選地,可以以增加拒絕常數為代價傳遞 PDF 下區域的上限。默認值為 1。
- domain: 長度為 2 的列表或元組,可選
分布的支持。默認為
None
。當None
:如果一個
support
方法由分發對象提供距離,用於設置分布的域。否則,假定支持為 。
- cdf_at_mode: 浮點數,可選
CDF 在模式。可以給出它來提高算法的性能。當 CDF at mode 給定時,拒絕常數減半。默認為
None
。- random_state: {無,整數,
numpy.random.Generator
, numpy.random.RandomState
}, optionalNumPy 隨機數生成器或底層NumPy 隨機數生成器的種子,用於生成統一隨機數流。如果random_state是無(或np.random), 這
numpy.random.RandomState
使用單例。如果random_state是一個 int,一個新的RandomState
使用實例,播種random_state.如果random_state已經是一個Generator
或者RandomState
實例然後使用該實例。
參數 ::
參考:
[1]UNU.RAN 參考手冊,第 5.3.16 節,“SROU - 簡單 Ratio-of-Uniforms 方法”,http://statmath.wu.ac.at/software/unuran/doc/unuran.html#SROU
[2]萊多德,約瑟夫。 “用於連續和離散單變量T-concave 分布的簡單通用生成器。” ACM 數學軟件交易 (TOMS) 27.1 (2001): 66-82
[3]萊多德,約瑟夫。 “通過通用 ratio-of-uniforms 方法的短通用生成器。”計算數學 72.243 (2003): 1453-1471
例子:
>>> from scipy.stats.sampling import SimpleRatioUniforms >>> import numpy as np
假設我們有正態分布:
>>> class StdNorm: ... def pdf(self, x): ... return np.exp(-0.5 * x**2)
請注意,PDF 沒有集成到 1。我們可以在生成器初始化期間傳遞 PDF 下的確切區域,也可以傳遞 PDF 下的確切區域的上限。此外,建議通過分發模式以加快設置:
>>> urng = np.random.default_rng() >>> dist = StdNorm() >>> rng = SimpleRatioUniforms(dist, mode=0, ... pdf_area=np.sqrt(2*np.pi), ... random_state=urng)
現在,我們可以使用
rvs
方法從分布中生成樣本:>>> rvs = rng.rvs(10)
如果模式下的 CDF 可用,則可以設置它以提高
rvs
的性能:>>> from scipy.stats import norm >>> rng = SimpleRatioUniforms(dist, mode=0, ... pdf_area=np.sqrt(2*np.pi), ... cdf_at_mode=norm.cdf(0), ... random_state=urng) >>> rvs = rng.rvs(1000)
我們可以通過可視化其直方圖來檢查樣本是否來自給定分布:
>>> import matplotlib.pyplot as plt >>> x = np.linspace(rvs.min()-0.1, rvs.max()+0.1, 1000) >>> fx = 1/np.sqrt(2*np.pi) * dist.pdf(x) >>> fig, ax = plt.subplots() >>> ax.plot(x, fx, 'r-', lw=2, label='true distribution') >>> ax.hist(rvs, bins=10, density=True, alpha=0.8, label='random variates') >>> ax.set_xlabel('x') >>> ax.set_ylabel('PDF(x)') >>> ax.set_title('Simple Ratio-of-Uniforms Samples') >>> ax.legend() >>> plt.show()
相關用法
- Python SciPy sampling.DiscreteAliasUrn用法及代碼示例
- Python SciPy sampling.DiscreteGuideTable用法及代碼示例
- Python SciPy sampling.FastGeneratorInversion用法及代碼示例
- Python SciPy sampling.RatioUniforms用法及代碼示例
- Python SciPy sampling.TransformedDensityRejection用法及代碼示例
- Python SciPy sampling.NumericalInverseHermite用法及代碼示例
- Python SciPy sampling.NumericalInversePolynomial用法及代碼示例
- Python SciPy stats.anderson用法及代碼示例
- Python SciPy stats.iqr用法及代碼示例
- Python SciPy special.exp1用法及代碼示例
- Python SciPy special.expn用法及代碼示例
- Python SciPy signal.czt_points用法及代碼示例
- Python SciPy signal.chirp用法及代碼示例
- Python SciPy stats.genpareto用法及代碼示例
- Python SciPy signal.residue用法及代碼示例
- Python SciPy special.ncfdtri用法及代碼示例
- Python SciPy special.gamma用法及代碼示例
- Python SciPy signal.iirdesign用法及代碼示例
- Python SciPy special.y1用法及代碼示例
- Python SciPy special.y0用法及代碼示例
- Python SciPy special.ellip_harm_2用法及代碼示例
- Python SciPy signal.max_len_seq用法及代碼示例
- Python SciPy sparse.isspmatrix用法及代碼示例
- Python SciPy signal.kaiser_atten用法及代碼示例
- Python SciPy stats.skewnorm用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.stats.sampling.SimpleRatioUniforms。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。