如何在sympy中计算随机变量的条件期望值?我看了this并尝试了:
from sympy.stats import *
v = Uniform("v",0,1)
E(v)
这正确地返回1/2,但随后:
E(v, v>1/2)
返回NaN。我也尝试过:
E(v, where(v > 1/2))
它返回1/2,这是不正确的(它应该是3/4)。
我做错了什么?
答案 0 :(得分:1)
这个问题(我看到你already reported)特定于均匀分布的随机变量。 (还有一个older issue涉及Uniform。)对于其他发行版,你所做的工作正确:
>>> from sympy.stats import *
>>> x = Exponential("x", 1)
>>> E(x, x < 2)
-3/(-1 + exp(2)) + exp(2)/(-1 + exp(2))
对于统一类型,现在的解决方法是记住将均匀分布的随机变量调节到某个区间会创建另一个均匀分布的随机变量。
因此可以通过计算
找到E(v, v > 1/2)
的值
E(Uniform("x", 1/2, 1))
返回0.75。
警告:如果以交互方式工作,除了统计模块之外,还可能希望最终从核心SymPy导入。由于E代表欧拉的数字2.718 ...在SymPy中,人们可能最终无法用
来计算期望值TypeError:'Exp1'对象不可调用
因此,要么必须更具体地说明要导入的内容,要么为一个或两个模块使用命名空间。我的首选解决方案是
from sympy import *
import sympy.stats as st
st.E
是期望的E
是2.718 ...