scipy.stats.

rv_discrete#

class scipy.stats.rv_discrete(a=0, b=inf, name=None, badvalue=None, moment_tol=1e-08, values=None, inc=1, longname=None, shapes=None, seed=None)[源代码][源代码]#

一个通用的离散随机变量类,用于子类化。

rv_discrete 是一个基类,用于构建特定分布类和离散随机变量的实例。它也可以用于构建由支持点和相应概率列表定义的任意分布。

参数:
afloat, 可选

分布支持的下界,默认值:0

bfloat, 可选

分布支持的上限,默认值:正无穷

moment_tolfloat, 可选

对矩的通用计算的容差。

两个类数组的元组,可选

(xk, pk) 其中 xk 是整数,pk 是介于 0 和 1 之间的非零概率,且 sum(pk) = 1xkpk 必须具有相同的形状,并且 xk 必须是唯一的。

inc整数,可选

支持分布的增量。默认值为1。(其他值尚未测试)

badvaluefloat, 可选

结果数组中的值,表示由于某些参数限制被违反而产生的值,默认是 np.nan。

名称str, 可选

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

长名称str, 可选

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

形状str, 可选

分布的形状。例如,对于一个需要两个整数作为其所有方法的两个形状参数的分布,可以表示为“m, n”。如果没有提供,形状参数将从实例的私有方法 _pmf_cdf 的签名中推断出来。

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

如果 seed 是 None(或 np.random),则使用 numpy.random.RandomState 单例。如果 seed 是 int,则使用新的 RandomState 实例,并以 seed 为种子。如果 seed 已经是 GeneratorRandomState 实例,则使用该实例。

属性:
random_state

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

方法

rvs(*args, **kwargs)

给定类型的随机变量。

pmf(k, *args, **kwds)

给定随机变量在 k 处的概率质量函数。

logpmf(k, *args, **kwds)

给定随机变量在 k 处的概率质量函数的对数。

cdf(k, *args, **kwds)

给定随机变量的累积分布函数。

logcdf(k, *args, **kwds)

给定随机变量在 k 处的累积分布函数的对数。

sf(k, *args, **kwds)

生存函数 (1 - cdf) 在给定随机变量 RV 的 k 处。

logsf(k, *args, **kwds)

给定随机变量的生存函数的对数。

ppf(q, *args, **kwds)

百分位点函数(cdf 的逆函数)在给定随机变量 RV 的 q 处的值。

isf(q, *args, **kwds)

给定随机变量在 q 处的逆生存函数(sf 的逆)。

moment(order, *args, **kwds)

指定阶数的分布非中心矩。

stats(*args, **kwds)

给定RV的一些统计数据。

entropy(*args, **kwds)

随机变量的微分熵。

expect([func, args, loc, lb, ub, ...])

通过数值求和计算离散分布下函数的期望值。

median(*args, **kwds)

分布的中位数。

mean(*args, **kwds)

分布的均值。

std(*args, **kwds)

分布的标准差。

var(*args, **kwds)

分布的方差。

interval(confidence, *args, **kwds)

在中位数周围等面积的置信区间。

__call__(*args, **kwds)

冻结给定参数的发行版。

support(*args, **kwargs)

对发行版的支持。

注释

此类与 rv_continuous 类似。形状参数是否有效由 _argcheck 方法决定(默认情况下检查其参数是否严格为正)。主要区别如下。

  • 分布的支持是一组整数。

  • 这个类定义了 概率质量函数 pmf`(以及相应的私有 ``_pmf`),而不是概率密度函数 pdf``(以及相应的私有 ``_pdf)。

  • 没有 scale 参数。

  • 方法的默认实现(例如 _cdf)不适用于支持下限无界的分布(即 a=-np.inf),因此必须重写。

要创建一个新的离散分布,我们将执行以下操作:

>>> from scipy.stats import rv_discrete
>>> class poisson_gen(rv_discrete):
...     "Poisson distribution"
...     def _pmf(self, k, mu):
...         return exp(-mu) * mu**k / factorial(k)

并创建一个实例:

>>> poisson = poisson_gen(name="poisson")

注意,上面我们以标准形式定义了泊松分布。通过向实例的方法提供 loc 参数,可以对分布进行平移。例如,poisson.pmf(x, mu, loc) 将工作委托给 poisson._pmf(x-loc, mu)

从概率列表生成分布

或者,您可以通过使用 rv_discrete 构造函数的 values 关键字参数,构建一个在有限值集合 xk 上定义的任意离散随机变量,其中 Prob{X=xk} = pk

深度复制 / 序列化

如果一个分布或冻结分布被深度复制(序列化/反序列化等),任何底层随机数生成器也会随之深度复制。这意味着,如果一个分布在复制前依赖于单例 RandomState,复制后它将依赖于该随机状态的副本,并且 np.random.seed 将不再控制该状态。

示例

定制的离散分布:

>>> import numpy as np
>>> from scipy import stats
>>> xk = np.arange(7)
>>> pk = (0.1, 0.2, 0.3, 0.1, 0.1, 0.0, 0.2)
>>> custm = stats.rv_discrete(name='custm', values=(xk, pk))
>>>
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, 1)
>>> ax.plot(xk, custm.pmf(xk), 'ro', ms=12, mec='r')
>>> ax.vlines(xk, 0, custm.pmf(xk), colors='r', lw=4)
>>> plt.show()
../../_images/scipy-stats-rv_discrete-1_00_00.png

随机数生成:

>>> R = custm.rvs(size=100)