我想lambdify sympy的 exp
,但是当我试图在 sympy.Symbol
评估函数时遇到了一些有趣的问题 . 这个
import sympy
t = sympy.Symbol('t')
f = sympy.lambdify(t, t**2)
f(t) # no problem
工作正常,但这个
t = sympy.Symbol('t')
f = sympy.lambdify(t, sympy.exp(t))
f(t)
给
AttributeError: 'Symbol' object has no attribute 'exp'
对于我尝试过的所有其他原生语言功能也是如此( log
, sin
等) .
知道发生了什么事吗?
2 回答
您应该使用
lambdify
函数的modules
参数指定要使用的模块:lambdify
的主要用途是允许对表达式进行快速数值计算 . 这是通过将抽象和慢速SymPy函数(如sympy.exp
)替换为用于数字的更快的函数(如math.exp
或numpy.exp
)来实现的 . 这些不能处理SymPy符号(比如你的t
)作为参数,这不是lambdify
无论如何 .如果使用
dummify=False
作为附加参数调用lambdify
,则在调用f(t)
时会出现更有意义的错误,即:这里无法转换的表达式是您的参数
t
.如果由于某种原因想要使用带符号作为参数的lambdified函数,则需要将
modules=["sympy"]
作为附加参数传递给lambdify
. 此参数指定lambdify
用于替换SymPy函数的模块(如sympy.exp
) - 在这种情况下,它再次为sympy
,因此实际上没有任何实际发生 .