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] 内计算。

参数:
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