當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。