lambdify表达式与原生的sympy函数

时间:2017-09-20 11:52:55

标签: python 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'

我尝试过的所有其他原生语音功能也是如此(logsin等。)

知道发生了什么事吗?

2 个答案:

答案 0 :(得分:2)

您应该使用modules函数的lambdify参数指定要使用的模块:

f = sympy.lambdify(t, sympy.exp(t), modules=["sympy"])

答案 1 :(得分:2)

lambdify的主要用途是允许对表达式进行快速数值计算。 这是通过将抽象和慢速SymPy函数(如sympy.exp)替换为用于数字的更快的函数(如math.expnumpy.exp)来实现的。 这些不能作为参数处理SymPy符号(如t),这不是lambdify的目的。

如果您使用lambdify作为附加参数调用dummify=False,则在调用f(t)时会收到更有意义的错误,即:

TypeError: can't convert expression to float

此处无法转换的表达式是您的参数t

如果由于某种原因想要使用带符号作为参数的lambdified函数,则需要将modules=["sympy"]作为附加参数传递给lambdify。 此参数指定lambdify用于替换SymPy函数的模块(如sympy.exp) - 在这种情况下,它再次为sympy,因此实际上没有任何实际发生。