SymPy 自动处理表达式
我一直在使用 SymPy 将表达式转换为乳胶(然后由 Matplotlib 渲染)。例如,
from sympy import latex, sympify
from sympy.abc import x
str = '2*x + 3*x'
TeX = latex(sympify(str))
问题是它会自动处理表达式,因此 2*x + 3*x 自动变为 5*x 等;这不是我想要的(不要问!)。
I have been using SymPy to convert expressions into latex (to then be rendered by Matplotlib). e.g.
from sympy import latex, sympify
from sympy.abc import x
str = '2*x + 3*x'
TeX = latex(sympify(str))
The problem is that it automatically processes the expression, so 2*x + 3*x automatically becomes 5*x etc; which is not what I want (don't ask!).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Sympy 的
Add
类处理符号的添加。您可以提供关键字参数来停止自动收集术语。根据您对 phimuemue 评论的回复,这可能不完全是您想要的。
Sympy's
Add
class handles the addition of symbols. You can provide a keyword argument to stop the automatic collection of terms.This may not be exactly what you want based on your reply to phimuemue's comment.
实际上,当您调用 sympify(str) 时,它会尝试解析表达式并将它们转换为默认类。在这种情况下,将调用
Add(2*x,2*x)
(默认参数 evalaute=True),因此变为5*x
。如果你想避免它,你必须调用Add(2*x,3*x,evaluate=False)
或使用一些全局变量并检查 init 方法core->AssocOp 类operation.py我正在这样做
**注意 - sympy 使用函数的缓存,因此如果您调用相同的函数(例如:
sympy("2*x+3*x")
)两次.1st一次使用全局变量evaulate=True
,第二次使用evaluate=False
。在这两种情况下,由于缓存,您将得到相同的结果。因此,您需要更新 core->expr 类中的 (add ,mul ) 等方法。类似下面的内容
但我建议如果你不使用评估=False会更好。同情的行为将会发生巨大的变化。像我在这篇帖子中遇到的问题
Actually when you call sympify(str) it tries to parse expression and convert them into the default classes. In this case
Add(2*x,2*x)
will be called (with default parameter evalaute=True) so this became5*x
. If you want to avoid it either you have to callAdd(2*x,3*x,evaluate=False)
or use some global variable and check in init method of AssocOp class in core-> operation.pyi am doing this
**Note - sympy use caching for function , so if you call same function (say :
sympy("2*x+3*x")
)two times .1st time with your gloabl variableevalute=True
and 2nd time withevaluate=False
. in both cases becuase of caching you will get same result.So you need to update methods like (add ,mul ) in core->expr class. something like below
But i will suggest it would be better if you dont use evaluate=False. Behavior of sympy will change dramatically. problems like i was facing in this post