我试图定义一个具有多个属性的lambda函数,属性为sympy
符号,并且在字典中如下所示
my_dict = {'sym1':sym1 , 'sym2':sym2 , ......}
我需要定义一个lambda函数来执行eval()
,如下所示:
fn = lambda expr , **my_dict : eval(expr)
这样当我用数字eval
的词典调用它时,可以正确地替换它们如下:
subs_dict={'sym1':1 , 'sym2':5 , ......)
expr = #some text eqn of the syms
x = fn(expr,**subs_dict)
print(x)
然而,当我这样做时,x
被打印为符号的功能......为什么??!我该怎么办?
答案 0 :(得分:0)
eval
已经做了你想做的事:
>>> eval("3*x**2 + 4*y", None, dict(x=0, y=-10000000))
-40000000
如果你的项目确实要求在lambda中包装eval
:
>>> fn = lambda expr, **kwargs : eval(expr, None, kwargs)
>>> fn("3*x+4*y",x=1,y=2)
11
如果您使用sympy,lambdify
是一个更强大的替代方案,它带有多个后端:
>>> import sympy as sp
>>> x, y = sp.symbols('x y')
>>> f = sp.lambdify((x, y), 3*x+4*y, modules='numpy')
>>> import numpy as np
>>> f(np.random.randn(10), np.random.randn(10))
array([ 3.86723102, 0.85028042, -1.74461009, -4.02824375, -0.59191871,
-0.52022366, 5.43335779, -2.09120517, -7.16387162, -0.22421031])