2017-09-04 89 views
1

我想避免乘以1以sympy评估。我如何实现这一目标?避免在sympy中乘以1评估

我不明白为什么比方说,乘以0可以是未评估的,而乘以1总是评估。

>>> from sympy import Symbol,Mul 
>>> x = Symbol('x') 
>>> Mul(1,x,evaluate=False) 
x 
>>> Mul(0,x,evaluate=False) 
0*x 
+0

是仅打印的最终目标,还是您希望稍后对表达式进行评估? – rodgdor

+0

我写过一种解析许多术语的代码生成器,假设它们是Mul(数字,某物)的形式。当然,我可以修改解析器,但我仍然怀疑,我相信正确的行为应该是Mul(1,x,evaluate = False)成为一个具有args =(1,x)的Mul。 –

回答

1

这是在https://github.com/sympy/sympy/pull/13188的工作。目前,即使evaluate = False,1(对于Muls)和0(对于Adds)也会自动删除。如果你只是想解析一些东西(number,foo),你可以使用expr.as_coeff_Mul(),例如(1+x).as_coeff_Mul() -> (1, 1 + x)