Scipy期望函数不会给出预期的输出

时间:2014-08-06 10:05:22

标签: python scipy

当对指数分布的随机变量使用expect函数时,我无法获得预期的输出。这是一个小例子,我对函数的期望" x = 1"在0到3的范围内。这相当于积分密度函数,因此输出应该等于3中评估的CDF。

from scipy.stats.distributions import expon

mu = 0.3
rv = expon(scale=1/mu)
upper = 3.

print rv.dist.expect(lambda x: 1.,lb = 0.,ub = upper)

返回0.950212931632。

在upper中计算的指数分布的cdf应该给出相同的结果:

print rv.cdf(upper)

但是这给了0.593430340259。

这可能不是最有洞察力的问题,但我不明白我做错了什么。有没有人看到这个错误?或者期望函数有什么错误吗?

1 个答案:

答案 0 :(得分:1)

rv = expon(scale=1/mu)

创建“冻结”分布,其比例固定为1 / mu。 冻结分布是rv_frozen类的实例。 此类在其中包含对 unfrozen 分发的引用 dist属性。因为dist不是冻结分布, 如果您使用dist中的任何方法,则必须提供所有参数 (否则他们使用与expon相同的默认值,而不是。{ 冻结论据。)

In [57]: mu = 0.3

In [58]: rv = expon(scale=1/mu)

In [59]: upper = 3.0

In [60]: rv.dist.expect(func=lambda x: 1, scale=1/mu, lb=0, ub=upper)
Out[60]: 0.5934303402594009

In [61]: rv.cdf(upper)
Out[61]: 0.59343034025940089

您可以轻松地使用dist属性,而不是使用expon.expect属性 使用In [62]: expon.expect(func=lambda x: 1, scale=1/mu, lb=0, ub=upper) Out[62]: 0.5934303402594009 方法:

expect

这里的“真实”问题是冻结分布没有 提供{{1}}方法。如果它看起来像一个重要的功能 有,你可以创建一个增强请求的问题 scipy github site