sympy: показать все символические переменные, которые были подставлены в выражение - PullRequest
0 голосов
/ 02 ноября 2019

Можно ли раскрыть все символические переменные, которые участвуют в выражении sympy?

Вот пример кода, который может быть довольно запутанным:

from sympy import *
from sympy.stats import Normal, sample, variance

sigma_eps = symbols('sigma_eps')
eps = Normal("eps", 0, sigma_eps)

sigma_any = eps + 1
sigma_1 = (eps+1).subs({sigma_eps:1})
sigma_10 = (eps+1).subs({sigma_eps:10})

Если вы печатаете sigma_any, sigma_1 или sigma_10 все они выглядят одинаково. Они все скажут вам, что их значение eps + 1. Но на самом деле значения имеют совершенно разные распределения.

Можно ли выявить, какие случайные величины были использованы и уже заменены на выражение?

1 Ответ

1 голос
/ 02 ноября 2019

Общее правило (не всегда соблюдаемое) заключается в том, что строковую форму выражения следует копировать и вставлять для воссоздания объекта. Этот случай является исключением, и может быть открыт вопрос на https://github.com/sympy/sympy/issues.

Вы можете сказать, что они не совпадают, если вы проверите формы srepr`:

>>> srepr(sigma_1)==srepr(sigma_10)
False

Кроме того, free_symbols не показывает, что вы хотите, но разница между атомами до и после замены покажет, что было изменено:

>>> sigma_any.free_symbols
{eps}
>>> sigma_any.atoms()
{0, 1, eps, sigma_eps}
>>> sigma_1.atoms()
{0, 1, eps}

Обратите внимание, что sigma_eps отсутствует в последнем выводе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...