本文简要介绍 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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。