重新排列sympy outpu

2024-05-19 13:25:59 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法控制sympy输出表达式的顺序? 例如:

>>> p
a*(-b*exp(x) + 1)

我能强迫sympy写吗

a*(1 - b*exp(x))

相反呢

(如果有人想知道-它直接通过pylatex进入LaTeX文档,因此出于格式化原因,订单对我很重要)


Tags: 文档订单顺序表达式原因latexsympy办法
2条回答

作为一种解决方法,请考虑以下内容,即首先放置一个应出现的符号来代替第二个出现的符号,然后使用未评估的符号替换来恢复原始术语:

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)'

恐怕没有办法。我认为主要的问题是,对于包含减号的和,顺序自然是“错误的”。有些情况已经修复,例如1 - x按您在中的预期打印 https://github.com/sympy/sympy/pull/15985 还有另一个开放的PR可以更普遍地解决这个问题: https://github.com/sympy/sympy/issues/16090

相关问题 更多 >