Sympy Custom Дискретная случайная величина - PullRequest
0 голосов
/ 05 мая 2018

Я хочу иметь произвольную дискретную случайную величину в sympy. Мне известно о sympy.stats.FiniteRV, но я считаю, что это требует от вас определения функции вероятности; Мне нужен символический дискретный RV. В sympy.stats я не знаю, как это определить, поэтому сейчас я делаю что-то вроде

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

чтобы получить мой дистрибутив. Однако я хотел бы, чтобы эта функция знала, что это дискретное распределение вероятностей, то есть я хочу, чтобы p(x) >= 0 для всех x и чтобы распределение суммировалось в единицу. Набор, для которого определено 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}.

Есть ли способ, которым я могу создать подкласс Function или что-то из sympy.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...