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
其中
ub
和lb
是参数,x
服从dist.pdf(x)
分布。如果边界lb
和ub
对应于分布的支持范围,例如默认情况下为[-inf, inf]
,则积分是f(x)
的无限制期望。此外,函数f(x)
可以定义为f(x)
在有限区间之外为0
,在这种情况下,期望值将在有限范围[lb, ub]
内计算。- 参数:
- func可调用对象,可选
计算积分的函数。仅接受一个参数。默认值为恒等映射 f(x) = x。
- args元组,可选
分布的形状参数。
- loc浮点数,可选
位置参数(默认值为 0)。
- scale浮点数,可选
尺度参数(默认值为 1)。
- lb, ub标量,可选
积分的下限和上限。默认设置为分布的支持范围。
- conditional布尔值,可选
如果为 True,则积分将通过积分区间的条件概率进行修正。返回值是函数的期望值,以处于给定区间为条件。默认值为 False。
- 其他关键字参数将传递给积分例程。
- 返回值:
- expect浮点数
计算的期望值。
注释
此函数的积分行为继承自
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