我想在 sympy 中有一个自定义离散随机变量 . 我知道 sympy.stats.FiniteRV ,但我相信这要求你定义概率质量函数是什么;我需要一个符号离散的房车 . 我在 sympy.stats 中没有任何方法来定义这个,所以目前我正在做类似的事情

from sympy import Function, Symbol
x = Symbol('x')
p = Function('p_x', nargs=1)
p_x = p(x)

得到我的发行 . 我'd like, though, is for this function to be aware that it'是一个离散的概率分布,也就是说,我想 p(x) >= 0 为所有 x 和分配总和为1 . p 定义的集合是符号的,但是能够做类似的事情会很好

from sympy import symbols, Sum
x0, xm = symbols('x_0 x_m')
total_probability = Sum(p_x, (x, x0, xm)).doit()
assert total_probability == 1

其中 p 是为集合 {x0, ...., xm} 定义的 .

是否有一种方法可以将 Functionsympy.stats 中的某些内容创建为我在其支持集中传递的分布,然后它将正确地加到1并且对该集合是非负的?

奖励积分 - 有没有办法可以处理边缘化?即如果我有

pxy = Function('p_{x, y}', nargs=2)
py = Function('p_y', nargs=1)
y, y0, ym = symbols('y y_0 y_m')
# and somehow define the sets for these as x0, ..., xm and y0, ..., yn
Sum(pxy(x, y), (y, y0, ym)).doit() == p_x