【发布时间】:2017-02-03 12:11:48
【问题描述】:
我正在使用 Python 和 Sympy。
我有以下几点:
x,y,z = Symbols('x,y,z')
doc = {x : False, y : True, z: True}
rule = Or(x, And(y,z))
我正在 Sympy 中寻找一个函数,它将在 rule.eval(doc) 上返回 True?
编辑:
目前我正在使用 rule.subs 和 rule.xreplace 两者都执行缓慢,每次调用大约 0.0003 秒。这使得它不切实际。
【问题讨论】:
-
我想知道你为什么不能
rule.subs(doc)? -
嗨,你是对的,我没有提到它。这是我用过的,
rule.subs和rule.xreplace它们都按预期工作,但性能很差。我分析了我的代码,发现每次执行大约需要 0.0003 秒。我经常使用这些功能。我正在寻找更有效的方法 -
你必须使用 sympy 吗?如果没有,那么你可以这样做:
import operator as op; rule = lambda x,y,z: op.or_(x, op.and_(y,z)); rule(False,True,True)。不提供字典,但速度更快。 -
是的,程序的其余部分有一些复杂的逻辑,我必须使用 Sympy。我似乎无法理解为什么在 Sympy 中没有实现如此简单的操作。它有
evalf()用于数字但不用于布尔值。