当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy stats.rv_continuous用法及代码示例


本文简要介绍 python 语言中 scipy.stats.rv_continuous 的用法。

用法:

class  scipy.stats.rv_continuous(momtype=1, a=None, b=None, xtol=1e-14, badvalue=None, name=None, longname=None, shapes=None, seed=None)#

用于子类化的通用连续随机变量类。

rv_continuous 是为连续随机变量构造特定分布类和实例的基类。它不能直接用作发行版。

参数

momtype 整数,可选

要使用的通用矩计算类型:0 表示 pdf,1(默认)表示 ppf。

a 浮点数,可选

分布支持的下限,默认为负无穷大。

b 浮点数,可选

分布支持的上限,默认为正无穷大。

xtol 浮点数,可选

通用 ppf 的定点计算容差。

badvalue 浮点数,可选

结果数组中的值指示违反了某些参数限制的值,默认为 np.nan。

name str,可选

实例的名称。此字符串用于构造分布的默认示例。

longname str,可选

当子类没有自己的文档字符串时,此字符串用作返回的文档字符串的第一行的一部分。注意:longname 的存在是为了向后兼容,不要用于新的子类。

shapes str,可选

分布的形状。例如 "m, n" 用于将两个整数作为其所有方法的两个形状参数的分布。如果未提供,形状参数将从实例的私有方法_pdf_cdf 的签名中推断出来。

seed {无,int, numpy.random.Generator numpy.random.RandomState },可选

如果种子是无(或np.random), 这numpy.random.RandomState使用单例。如果种子是一个 int,一个新的RandomState使用实例,播种种子.如果种子已经是一个Generator或者RandomState实例然后使用该实例。

注意

分发类实例的公共方法(例如,pdfcdf)检查它们的参数并将有效参数传递给私有计算方法(_pdf_cdf)。对于 pdf(x) ,如果 x 在发行版的支持范围内,则它是有效的。形状参数是否有效由 _argcheck 方法决定(默认检查其参数是否为严格正数。)

子类化

新的随机变量可以通过子类化 rv_continuous 类并至少重新定义 _pdf_cdf 方法(标准化为位置 0 和比例 1)来定义。

如果您的 RV 的正参数检查不正确,那么您还需要重新定义 _argcheck 方法。

对于大多数 scipy.stats 分布,支持区间不依赖于形状参数。 x 处于支持区间相当于 self.a <= x <= self.b 。如果支撑的任一端点确实依赖于形状参数,则 i) 分布必须实现_get_support 方法; ii) 必须从分发对 rv_continuous 初始化程序的调用中省略这些依赖端点。

其余方法存在正确但可能较慢的默认值,但为了速度和/或准确性,您可以覆盖:

_logpdf, _cdf, _logcdf, _ppf, _rvs, _isf, _sf, _logsf

默认方法 _rvs 依赖于应用到统一随机变量的 cdf 的倒数 _ppf 。为了有效地生成随机变量,或者需要覆盖默认的_ppf(例如,如果逆 cdf 可以以显式形式表示),或者需要在自定义 _rvs 方法中实现采样方法。

如果可能,您应该覆盖 _isf_sf_logsf 。主要原因是为了提高数值精度:例如,生存函数_sf 被计算为1 - _cdf,如果_cdf(x) 接近一,这可能会导致精度损失。

可以被子类覆盖的方法

_rvs
_pdf
_cdf
_sf
_ppf
_isf
_stats
_munp
_entropy
_argcheck
_get_support

还有其他(内部和私有)通用方法可用于cross-checking 和调试,但在直接调用时可能适用于所有情况。

关于shapes: 子类不需要明确指定它们。在这种情况下,形状将自动从重写方法的签名中推断出来(pdf,cdf等等)。如果出于某种原因,您希望避免依赖自省,则可以指定shapes显式地作为实例构造函数的参数。

冻结分布

通常,您必须为分布方法的每次调用提供形状参数(以及可选的位置和比例参数)。

或者,可以调用对象(作为函数)来修复形状、位置和比例参数,返回 “frozen” 连续 RV 对象:

rv = generic(<shape(s)>, loc=0, scale=1)

rv_frozen 对象具有相同的方法,但保持给定的形状、位置和比例是固定的

统计数据

默认情况下使用数值积分计算统计数据。为了速度,您可以使用 _stats 重新定义它:

  • take shape parameters and return mu, mu2, g1, g2

  • If you can’t compute one of these, return it as None

  • Can also be defined with a keyword argument moments, which is a string composed of “m”, “v”, “s”, and/or “k”. Only the components appearing in string should be computed and returned in the order “m”, “v”, “s”, or “k” with missing values returned as None.

或者,您可以覆盖 _munp ,它采用 n 和形状参数并返回分布的 n-th 非中心矩。

深复制/酸洗

如果对分布或冻结分布进行深度复制(pickled/unpickled 等),则任何底层随机数生成器都会随之进行深度复制。这意味着,如果一个发行版在复制之前依赖于单例 RandomState,那么它将在复制后依赖于该随机状态的副本,并且 np.random.seed 将不再控制该状态。

例子

要创建新的高斯分布,我们将执行以下操作:

>>> from scipy.stats import rv_continuous
>>> class gaussian_gen(rv_continuous):
...     "Gaussian distribution"
...     def _pdf(self, x):
...         return np.exp(-x**2 / 2.) / np.sqrt(2.0 * np.pi)
>>> gaussian = gaussian_gen(name='gaussian')

scipy.stats分布是实例, 所以这里我们子类化rv_continuous并创建一个实例。有了这个,我们现在有了一个函数齐全的分布,所有相关的方法都由框架自动生成。

请注意,上面我们定义了一个标准正态分布,均值和单位方差为零。可以通过使用 locscale 参数来完成分布的移动和缩放: gaussian.pdf(x, loc, scale) 本质上是计算 y = (x - loc) / scalegaussian._pdf(y) / scale

属性

random_state

获取或设置生成随机变量的生成器对象。

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.stats.rv_continuous。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。