Sympy在评估后比较表达式

时间:2014-12-30 16:26:38

标签: sympy evaluation

我想要一个可以比较的函数,无论是评估表达式还是非评估表达式都不同。所以这个:

import sympy.parsing.sympy_parser as spp

string = "x+x"
exp1 = spp.parse_expr(string, evaluate = False)
exp2 = spp.parse_expr(string)
print exp1
print exp2
print exp1 == exp2

应输出

x + x
2*x
False

string = "x**2+1"相同的代码应输出

x**2+1
x**2+1
True # But it outputs False here too.

是的,我已阅读the FAQ,但它没有解释如何修复/解决此问题。

1 个答案:

答案 0 :(得分:1)

相关问题是https://github.com/sympy/sympy/issues/5904

evaluate=False时,args属性未排序:

>>> a = sympify('x**2 + 1', evaluate=False)
>>> b = sympify('x**2 + 1')
>>> a == b
False
>>> a.args
(x**2, 1)
>>> b.args
(1, x**2)

我不相信(但您应该检查mailing list以确定)有一种内置方法可以解决此问题。最佳方法取决于您通过此比较尝试完成的任务。

https://groups.google.com/forum/#!msg/sympy/LU5DQGJJhfc/_Le_u8UGtx0J的讨论(虽然过时!)建议使用_sorted_args属性制作自定义比较函数:

>>> a._sorted_args
[1, x**2]
>>> b._sorted_args
[1, x**2]