python - 获取 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))"
。这包含我需要的一切,但我不确定如何以有效的方式从那里提取我需要的所有部分?有人能帮我吗?谢谢!
解决方案
有多种方法可以解决这个问题。以下是一些让您入门的演示:
>>> 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]
推荐阅读
- c# - 在 Android 中显示的 Svg 文件
- google-maps - 反向地理编码 API 无法识别地理编码 API 坐标 (ZERO_RESULTS)
- c++ - 结构数组中所有相似字段的总和
- java - 为什么将对象写入文件会在这里出错?(使用 ObjectOutputStream)
- c++ - 包含数据流的 Remux mp4 文件
- kubernetes - Kubernetes 可以将分析作业链接到一个工作流中吗?
- c# - 这个单例声明不正确吗?
- css - 制作一个不可点击的菜单项
- java - 验证 REST API 中的查询参数
- wordpress - Gutenberg 块 - 在块内处理服务器数据