首页 > 解决方案 > 获取 sympy 表达式的操作

问题描述

如何让操作出现在 sympy 表达式中?例如,对于: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))"。这包含我需要的一切,但我不确定如何以有效的方式从那里提取我需要的所有部分?有人能帮我吗?谢谢!

标签: pythonsympy

解决方案


有多种方法可以解决这个问题。以下是一些让您入门的演示:

>>> 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]

推荐阅读