我正在使用 sympy 进行一些符号数学运算,然后使用eval
sympy 的lambdastr
实用程序生成 Python lambda 函数。这是我的意思的简化示例:
import sympy
import numpy as np
from sympy.utilities.lambdify import lambdastr
# simple example expression (my use-case is more complex)
expr = sympy.S('b*sqrt(a) - a**2')
a, b = sorted(expr.free_symbols, key=lambda s: s.name)
func = eval(lambdastr((a,b), expr), dict(sqrt=np.sqrt))
# call func on some numpy arrays
foo, bar = np.random.random((2, 4))
print func(foo, bar)
这行得通,但我不喜欢使用eval
,并且 sympy 不一定会生成计算效率高的代码。相反,我想使用numexpr
,这对于这个用例来说似乎很完美:
import numexpr
print numexpr.evaluate(str(expr), local_dict=dict(a=foo, b=bar))
唯一的问题是我想生成一个可调用的(如func
lambda),而不是numexpr.evaluate
每次都调用。这可能吗?