scipy.stats.rv_continuous.

expect#

rv_continuous.expect(func=None, args=(), loc=0, scale=1, lb=None, ub=None, conditional=False, **kwds)[source]#

透過數值積分計算函數相對於分佈的期望值。

函數 f(x) 相對於分佈 dist 的期望值定義為

        ub
E[f(x)] = Integral(f(x) * dist.pdf(x)),
        lb

其中 ublb 是引數,而 x 具有 dist.pdf(x) 分佈。如果邊界 lbub 對應於分佈的支援域,例如在預設情況下為 [-inf, inf],則積分是 f(x) 的無限制期望值。此外,函數 f(x) 可以被定義為使得 f(x) 在有限區間之外為 0,在這種情況下,期望值在有限範圍 [lb, ub] 內計算。

參數:
funccallable,optional

計算積分的函數。僅接受一個引數。預設值是恆等映射 f(x) = x。

argstuple,optional

分佈的形狀參數。

locfloat,optional

位置參數(預設值=0)。

scalefloat,optional

比例參數(預設值=1)。

lb, ubscalar,optional

積分的下限和上限。預設設定為分佈的支援域。

conditionalbool,optional

如果為 True,則積分會根據積分區間的條件機率進行修正。傳回值是函數的期望值,條件是在給定區間內。預設值為 False。

其他關鍵字引數會傳遞給積分常式。
傳回值:
expectfloat

計算出的期望值。

註解

此函數的積分行為繼承自 scipy.integrate.quad。此函數和 scipy.integrate.quad 都無法驗證積分是否存在或為有限值。例如,cauchy(0).mean() 傳回 np.nan,而 cauchy(0).expect() 傳回 0.0

同樣地,函數不會驗證結果的準確性。scipy.integrate.quad 通常對於數值上有利的積分是可靠的,但不保證對於所有可能的區間和被積函數都收斂到正確的值。此函數是為了方便而提供;對於關鍵應用,請針對其他積分方法檢查結果。

此函數未向量化。

範例

為了理解積分邊界的效果,請考慮

>>> from scipy.stats import expon
>>> expon(1).expect(lambda x: 1, lb=0.0, ub=2.0)
0.6321205588285578

這接近於

>>> expon(1).cdf(2.0) - expon(1).cdf(0.0)
0.6321205588285577

如果 conditional=True

>>> expon(1).expect(lambda x: 1, lb=0.0, ub=2.0, conditional=True)
1.0000000000000002

與 1 的輕微偏差是由於數值積分。

被積函數可以透過傳遞 complex_func=Truescipy.integrate.quad 來視為複數值函數。

>>> import numpy as np
>>> from scipy.stats import vonmises
>>> res = vonmises(loc=2, kappa=1).expect(lambda x: np.exp(1j*x),
...                                       complex_func=True)
>>> res
(-0.18576377217422957+0.40590124735052263j)
>>> np.angle(res)  # location of the (circular) distribution
2.0