Sympy - Lambdify - интеллектуальные имена для фиктивных переменных - PullRequest
3 голосов
/ 30 октября 2019

Допустим, я хочу создать выражение с одним символом, написанным на латексном языке (потому что это действительно полезно визуализировать в блокноте Jupyter). Затем я использую lambdify, чтобы получить функцию, которую я могу оценить для нескольких значений. Проблема в том, что эта функция покажет переменную с именем _Dummy_, как показано ниже.

AoB = sp.symbols(r'\frac{\alpha}{\beta}')
expr = 2 * AoB
lam = sp.lambdify([AoB], expr, 'numpy')
display(lam)

Output: <function _lambdifygenerated(_Dummy_1198)>

Теперь представьте себе функцию-обертку: внутри нее я определил несколько выражений sympy, каждое из которых использует разные символы латекса. Я привожу индексный аргумент этой функции, который используется для возврата версии соответствующего выражения в lambdify.

Когда возвращается функция lambdify, мне бы очень хотелось узнать, на что ссылается _Dummy_, особеннокогда функция lambdify требует двух или более аргументов для оценки. Например, в приведенном выше примере у меня не было бы проблем, если бы аргумент функции назывался AoB (который я могу интерпретировать как альфа над бета).

В идеале я хотел бы создать Symbol, который принимает обаЛатекс (для визуализации), а также запасной символ, который будет использоваться всякий раз, когда будет создана переменная Dummy (например, с lambdify). Возможно ли это?

1 Ответ

2 голосов
/ 31 октября 2019

Вероятно, самое простое решение для этого было бы сохранить отображение латексного символа на нормальные символы и заменить его до ламбидификации, как

AoB = sp.symbols(r'\frac{\alpha}{\beta}')
mapping = {AoB: Symbol('AoB')}
expr = 2 * AoB
lam = sp.lambdify([mapping[AoB]], expr.xreplace(mapping), 'numpy')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...