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 是一個基底類別,用於構建離散隨機變數的特定分布類別和實例。它也可以用於構建由支援點列表和相應機率定義的任意分布。

參數:
afloat, 選填

分布支援的下界,預設值:0

bfloat, 選填

分布支援的上界,預設值:正無窮大

moment_tolfloat, 選填

用於通用矩計算的容差。

values包含兩個 array_like 的元組,選填

(xk, pk),其中 xk 是整數,pk 是介於 0 和 1 之間的非零機率,且 sum(pk) = 1xkpk 必須具有相同的形狀,且 xk 必須是唯一的。

incinteger, 選填

分布支援的增量。預設值為 1。(尚未測試其他值)

badvaluefloat, 選填

結果陣列中的值,表示違反某些引數限制的值,預設值為 np.nan。

namestr, 選填

實例的名稱。此字串用於構建分布的預設範例。

longnamestr, 選填

此字串用作子類別沒有自己的文檔字串時傳回的文檔字串的第一行的一部分。注意:longname 的存在是為了向後相容性,請勿用於新的子類別。

shapesstr, 選填

分布的形狀。例如,對於將兩個整數作為其所有方法的兩個形狀引數的分布,“m, n”。如果未提供,形狀參數將從實例的私有方法 _pmf_cdf 的簽名中推斷出來。

seed{None, int, numpy.random.Generator, numpy.random.RandomState}, 選填

如果 seed 為 None(或 np.random),則使用 numpy.random.RandomState 單例。如果 seed 是整數,則使用新的 RandomState 實例,並以 seed 作為種子。如果 seed 已經是 GeneratorRandomState 實例,則使用該實例。

註解

此類別與 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")

請注意,上面我們以標準形式定義了 Poisson 分布。移動分布可以透過將 loc 參數提供給實例的方法來完成。例如,poisson.pmf(x, mu, loc) 將工作委派給 poisson._pmf(x-loc, mu)

從機率列表建立離散分布

或者,您可以透過使用 rv_discrete 建構子的 values 關鍵字引數,構建在有限值集 xk 上定義的任意離散 rv,其中 Prob{X=xk} = pk

深層複製 / Pickling

如果深層複製(pickled/unpickled 等)分布或凍結分布,則任何底層隨機數字產生器都會隨之深層複製。一個含義是,如果分布在複製之前依賴於單例 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)
屬性:
random_state

取得或設定用於產生隨機變數的產生器物件。

方法

rvs(*args, **kwargs)

給定類型的隨機變數。

pmf(k, *args, **kwds)

給定 RV 在 k 處的機率質量函數。

logpmf(k, *args, **kwds)

給定 RV 在 k 處的機率質量函數的對數。

cdf(k, *args, **kwds)

給定 RV 的累積分布函數。

logcdf(k, *args, **kwds)

給定 RV 在 k 處的累積分布函數的對數。

sf(k, *args, **kwds)

給定 RV 在 k 處的生存函數 (1 - cdf)。

logsf(k, *args, **kwds)

給定 RV 的生存函數的對數。

ppf(q, *args, **kwds)

給定 RV 在 q 處的百分點函數(cdf 的反函數)。

isf(q, *args, **kwds)

給定 RV 在 q 處的反生存函數(sf 的反函數)。

moment(order, *args, **kwds)

指定階數的分布的非中心矩。

stats(*args, **kwds)

給定 RV 的一些統計量。

entropy(*args, **kwds)

RV 的微分熵。

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)

分布的支援。