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)[source]#

适用于子类化的通用离散随机变量类。

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

参数:
a浮点数,可选

分布支持范围的下限,默认值:0

b浮点数,可选

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

moment_tol浮点数,可选

计算力矩时容许的误差。

values两个类数组的元组,可选

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

inc整数,可选

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

badvalue浮点数,可选

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

name字符串,可选

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

longname字符串,可选

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

shapes字符串,可选

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

seed{无,整数,numpy.random.Generatornumpy.random.RandomState}, 可选

如果 种子 为无 (or np.random),则会使用单例 numpy.random.RandomState。如果 种子 是一个整数,则会使用一个带有 种子 种子的新 RandomState 实例。如果 种子 已经是 生成器RandomState 实例,则会使用该实例。

注释

此类与 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 离散 rv。

深度复制/序列化

如果深度复制一个分布或冻结分布(腌制/解腌等),任何基础随机数生成器也会随之进行深度复制。一个影响是,如果一个分布在复制前依赖单例随机状态,就将在复制后依赖于该随机状态的副本,而 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)
属性:
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)

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

logsf(k, *args, **kwds)

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

ppf(q, *args, **kwds)

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

isf(q, *args, **kwds)

给定随机变量的 inverse survival function(sf 的反函数)为 q。

moment(order, *args, **kwds)

给定顺序的分布的非中心矩。

stats(*args, **kwds)

给定随机变量的一些统计信息。

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)

冻结给定参数的分布。

支持(*args, **kwargs)

分布的支持。