sympy: 如何在多个表达式之间简化

10

我有一组像这样的sympy表达式(大约有几百个):

>>> foo = parse_expr('X | Y')
>>> bar = parse_expr('(Z & X) | (Z & Y)')
>>> baz = parse_expt('AAA & BBB') # not needed for this example; just filler

我可以将其中一个简化:

>>> simplify(bar)
Z & (X | Y)

有没有一种方法可以简化,包括整个可用变量的集合?
>>> mysimplify(bar, include=(foo,bar,baz))
Z & foo
1个回答

4

您可以利用公共子表达式消除来优化代码。将所有表达式组合成单个人工表达式(例如,通过将它们作为虚构函数的参数传递)并与simplify一起使用。然而,我认为它不总是会按预期工作,但在类似于您的示例的情况下,它可以产生期望的结果:

In [1]: from sympy import *

In [2]: myexprlist = sympify('listofexpr(x|y, (z&x)|(z&y))')

In [3]: cse(simplify(myexprlist))
Out[3]: ([(x0, Or(x, y))], [listofexpr(x0, And(x0, z))])

结果中的第一个条目是已引入的子表达式列表。在本例中,子表达式x|y已用x0表示。结果的第二部分是简化后的表达式(打包成列表,因为输入可以是表达式列表)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接