2024-05-19 13:25:59 发布
网友
有没有办法控制sympy输出表达式的顺序? 例如:
>>> p a*(-b*exp(x) + 1)
我能强迫sympy写吗
a*(1 - b*exp(x))
相反呢
(如果有人想知道-它直接通过pylatex进入LaTeX文档,因此出于格式化原因,订单对我很重要)
作为一种解决方法,请考虑以下内容,即首先放置一个应出现的符号来代替第二个出现的符号,然后使用未评估的符号替换来恢复原始术语:
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
1 - x
作为一种解决方法,请考虑以下内容,即首先放置一个应出现的符号来代替第二个出现的符号,然后使用未评估的符号替换来恢复原始术语:
恐怕没有办法。我认为主要的问题是,对于包含减号的和,顺序自然是“错误的”。有些情况已经修复,例如
1 - x
按您在中的预期打印 https://github.com/sympy/sympy/pull/15985 还有另一个开放的PR可以更普遍地解决这个问题: https://github.com/sympy/sympy/issues/16090相关问题 更多 >
编程相关推荐