【发布时间】:2017-11-08 22:03:18
【问题描述】:
SymPy 在跟踪我对符号表达式所做的所有操作方面做得非常出色。但是在打印乳胶输出结果的那一刻,我想强制执行该术语的某种顺序。这只是为了约定,不幸的是,该约定在符号名称上不是按字母顺序排列的(就像sympy 一样合理)
import sympy as sp
sp.init_printing()
U,tp, z, d = sp.symbols('U t_\perp z d')
# do many operations with those symbols
# the final expression is:
z+tp**2+U+U/(z-3*tp)+d
我的问题是SymPy 将表达式排序为
U + U/(-3*t_\perp + z) + d + t_\perp**2 + z
但是这种排序不是我领域的惯例。对我们来说,z 必须是最左边的表达式,然后是 tp,然后是 U,即使它是大写的,d 也是最不相关的,放在右边。所有这些变量都具有特定的含义,这就是我们以这种顺序编写它们的原因,并且代码中的变量以这种方式命名的原因。
我不想将z 重命名为a 并按照Prevent Sympy from rearranging the equation 中的建议,然后在打印时将a 转换为z。在Force SymPy to keep the order of terms 中有一个提示,我可以编写一个排序函数,但我找不到关于它的文档。
【问题讨论】: