Python 重新安排同步输出
有没有办法控制Symphy输出表达式的顺序? 例如:Python 重新安排同步输出,python,sympy,Python,Sympy,有没有办法控制Symphy输出表达式的顺序? 例如: >>> p a*(-b*exp(x) + 1) 我能强迫辛皮写作吗 a*(1 - b*exp(x)) 相反 (如果有人想知道-它通过pylatex直接进入LaTeX文档,因此由于格式原因,订单对我很重要)恐怕没有办法做到这一点。我认为主要的问题是,对于包含负号的和,顺序自然是“错误的”。某些情况下已修复,例如,1-x按您在中的预期打印 还有另一个开放式PR可以更普遍地解决问题: 编辑:这里有我以前不知道的init_pr
>>> p
a*(-b*exp(x) + 1)
我能强迫辛皮写作吗
a*(1 - b*exp(x))
相反
(如果有人想知道-它通过pylatex直接进入LaTeX文档,因此由于格式原因,订单对我很重要)恐怕没有办法做到这一点。我认为主要的问题是,对于包含负号的和,顺序自然是“错误的”。某些情况下已修复,例如,
1-x
按您在中的预期打印
还有另一个开放式PR可以更普遍地解决问题:
编辑:这里有我以前不知道的init_printing(order='old')
:
In [26]: a*(1 - b*exp(x))
Out[26]:
⎛ x ⎞
a⋅⎝- b⋅ℯ + 1⎠
In [27]: init_printing(order='old')
In [28]: a*(1 - b*exp(x))
Out[28]:
⎛ x⎞
a⋅⎝1 - b⋅ℯ ⎠
In [29]: latex(a*(1 - b*exp(x)))
Out[29]: 'a \\left(1 - b e^{x}\\right)'
我并没有广泛地测试过,但是它似乎按我想要的方式工作。
< P>作为一个解决方案,考虑下面的符号,它首先出现一个符号,代替出现第二的符号,然后使用未经评估的替换来恢复原来的项:def pos1st(expr):
from sympy.core.function import _coeff_isneg
a2 = []
for i in expr.atoms(Add):
if len(i.args) == 2:
a = i.as_ordered_terms()
if list(map(_coeff_isneg, i.as_ordered_terms())) == [
True, False]:
a2.append(a[1])
reps = [(i, Dummy(str(j))) for j,i in enumerate(a2)]
return S(str(expr.xreplace(dict(reps))), {str(i): j for j,i in reps},
evaluate=False)
>>> expr = x*(1 - b*exp(x))
>>> pos1st(expr)
x*(1 - b*exp(x))
>>> latex(_)
'x \\left(1 - b e^{x}\\right)'