私はPythonとSympyを使用しています。PythonでSympyのブール式を評価する
x,y,z = Symbols('x,y,z')
doc = {x : False, y : True, z: True}
rule = Or(x, And(y,z))
私はrule.eval(doc)
にTrue
を返しますSympy内の関数を探しています:
私は次がありますか?
編集: 現在、私はrule.subs
とrule.xreplace
を使用していますが、どちらも呼び出しあたり約0.0003秒でゆっくりと実行しています。これは実用的ではない。このIPythonがくれた後
X = tuple(doc.iterkeys())
f = lambdify(X, rule)
:
なぜ 'rule.subs(doc)'を実行できないのでしょうか? –
こんにちは、あなたは正しいです、私はそれを言及していない。これは私が使っている 'rule.subs'と' rule.xreplace'ですが、どちらも期待どおりに動作しますが、奇妙なパフォーマンスがあります。コードをプロファイリングし、各実行に約0.0003秒かかることがわかりました。私はこれらの機能をたくさん使っています。私はより効率的な方法を探しています –
そしてsympyを使用する必要がありますか?そうでなければ、次のようにすることができます: 'import operator as op;ルール=ラムダx、y、z:op.or_(x、op.and_(y、z));ルール(False、True、True) 'を返します。それがはるかに速いのでdictを提供しません。 –