Получите операции выражения симпатии - PullRequest
1 голос
/ 03 февраля 2020

как я могу получить операции, появляющиеся в выражении симпатии? Например, для: 2+x**2+exp(7*x)-log(y) мне нужно получить что-то вроде: ["+","**","exp","*","-","log"]. Я вижу, что есть простой способ получить переменные, используя .free_symbols. Есть ли простой способ для операций тоже? Я также нашел эту функцию: srepr, которая возвращает: "Add(Pow(Symbol('x'), Integer(2)), exp(Mul(Integer(7), Symbol('x'))), Mul(Integer(-1), log(Symbol('y'))), Integer(2))". Он содержит все, что мне нужно, но я не уверен, как извлечь из него все нужные мне части эффективным способом? Кто-нибудь может мне помочь? Спасибо!

1 Ответ

2 голосов
/ 03 февраля 2020

Существует множество способов получения go. Вот несколько примеров, с которых можно начать:

>>> eq
x**2 + exp(7*x) - log(y) + 2
>>> count_ops(eq, visual=True) # expression showing how many of each
2*ADD + EXP + LOG + MUL + POW + SUB
>>> count_ops(eq,visual=True).free_symbols  # Symbols
{ADD, EXP, LOG, MUL, POW, SUB}
>>> [i.name for i in count_ops(eq,visual=True).free_symbols] # strings
[MUL, POW, ADD, LOG, EXP, SUB]

>>> [func_name(i) for i in eq.atoms(Basic)]
[Integer, Symbol, Integer, Mul, Symbol, log, exp, Mul, Add, Pow, NegativeOne]

>>> [func_name(i) for i in eq.atoms(Function)]
[log, exp]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...