Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重新安排同步输出_Python_Sympy - Fatal编程技术网

Python 重新安排同步输出

Python 重新安排同步输出,python,sympy,Python,Sympy,有没有办法控制Symphy输出表达式的顺序? 例如: >>> p a*(-b*exp(x) + 1) 我能强迫辛皮写作吗 a*(1 - b*exp(x)) 相反 (如果有人想知道-它通过pylatex直接进入LaTeX文档,因此由于格式原因,订单对我很重要)恐怕没有办法做到这一点。我认为主要的问题是,对于包含负号的和,顺序自然是“错误的”。某些情况下已修复,例如,1-x按您在中的预期打印 还有另一个开放式PR可以更普遍地解决问题: 编辑:这里有我以前不知道的init_pr

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

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