重新排序 SymPy 表达式
Reorder SymPy Expression
我有一个 -x + y
形式的 SymPy 表达式(其中 x、y 是原子,而不是其他表达式),但我想重新排列它们,使它们成为 y - x
,所以基本上只是去掉多余的 +
来缩短表达式。
我该怎么做(如果可能的话)?
示例输入和输出:
from sympy import *
expression = -4 + 2*I
reorder(expression) # how can I do that?
print(expression) # expected output: 2*I - 4
编辑:
万一有人需要它,这里有一个解决这个问题的方法,它也可以接受非 sympy.Add
类型的表达式,并只用重新排序的加法替换其中的加法,最终 return最终乳胶:
def negcolast(expr):
from sympy.core.function import _coeff_isneg as neg
if isinstance(expr, sympy.Add) and neg(expr.args[0]):
args = list(expr.args)
args.append(args.pop(0))
return sympy.UnevaluatedExpr(sympy.Add(*args,evaluate=False))
else:
return expr
def latex(expr):
expr = expr.replace(sympy.Add, lambda *args: negcolast(sympy.Add(*args)))
return sympy.latex(expr, order='none')
这是打印问题。无论您将 args 放在什么顺序,它们都将以相同的方式打印。这会定期出现,我有答案 and especially here。因此,如果你有两个参数,你需要找出其中是否只有一个有负号(例如使用 sympy.core.function._coeff_isneg
),创建一个未评估的添加(Add(pos, neg, evaulate=False)
),然后在告知后用打印机打印它不符合 re-order 条款。
>>> def negcolast(expr):
... from sympy.core.function import _coeff_isneg as neg
... if isinstance(expr, Add) and neg(expr.args[0]):
... args = list(expr.args)
... args.append(args.pop(0))
... return LatexPrinter({'order':'none'})._print_Add(Add(*args,evaluate=False))
... else:
... return latex(expr)
...
>>> negcolast(-4+2*I)
2i−4
我有一个 -x + y
形式的 SymPy 表达式(其中 x、y 是原子,而不是其他表达式),但我想重新排列它们,使它们成为 y - x
,所以基本上只是去掉多余的 +
来缩短表达式。
我该怎么做(如果可能的话)?
示例输入和输出:
from sympy import *
expression = -4 + 2*I
reorder(expression) # how can I do that?
print(expression) # expected output: 2*I - 4
编辑:
万一有人需要它,这里有一个解决这个问题的方法,它也可以接受非 sympy.Add
类型的表达式,并只用重新排序的加法替换其中的加法,最终 return最终乳胶:
def negcolast(expr):
from sympy.core.function import _coeff_isneg as neg
if isinstance(expr, sympy.Add) and neg(expr.args[0]):
args = list(expr.args)
args.append(args.pop(0))
return sympy.UnevaluatedExpr(sympy.Add(*args,evaluate=False))
else:
return expr
def latex(expr):
expr = expr.replace(sympy.Add, lambda *args: negcolast(sympy.Add(*args)))
return sympy.latex(expr, order='none')
这是打印问题。无论您将 args 放在什么顺序,它们都将以相同的方式打印。这会定期出现,我有答案 sympy.core.function._coeff_isneg
),创建一个未评估的添加(Add(pos, neg, evaulate=False)
),然后在告知后用打印机打印它不符合 re-order 条款。
>>> def negcolast(expr):
... from sympy.core.function import _coeff_isneg as neg
... if isinstance(expr, Add) and neg(expr.args[0]):
... args = list(expr.args)
... args.append(args.pop(0))
... return LatexPrinter({'order':'none'})._print_Add(Add(*args,evaluate=False))
... else:
... return latex(expr)
...
>>> negcolast(-4+2*I)
2i−4