scipy.stats.rv_histogram.
expect#
- rv_histogram.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
其中
ub
和lb
是引數,且x
具有dist.pdf(x)
分布。如果邊界lb
和ub
對應到分布的支撐集,例如預設情況下的[-inf, inf]
,則積分是f(x)
的無限制期望值。此外,函數f(x)
可以被定義為在有限區間外f(x)
為0
,在這種情況下,期望值在有限範圍[lb, ub]
內計算。- 參數:
- funccallable,選用
計算積分的函數。僅接受一個引數。預設值是恆等映射 f(x) = x。
- argstuple,選用
分布的形狀參數。
- locfloat,選用
位置參數(預設值=0)。
- scalefloat,選用
尺度參數(預設值=1)。
- lb, ubscalar,選用
積分的下限和上限。預設值設定為分布的支撐集。
- conditionalbool,選用
如果為 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=True
給scipy.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