Python 我如何创建符号lambda函数?

Python 我如何创建符号lambda函数?,python,sympy,Python,Sympy,例如,我有一个表达式: x = Symbol('x') f = sin(x) * x 我希望以下代码能够正常工作: >>> a = Symbol('a') >>> f(a) TypeError: 'Mul' object is not callable 我可以将此表达式转换为lambda函数,该函数将处理数字: >>> f = lambdify(x, f) >>> f(10) -5.440211108893697 但它

例如,我有一个表达式:

x = Symbol('x')
f = sin(x) * x
我希望以下代码能够正常工作:

>>> a = Symbol('a')
>>> f(a)
TypeError: 'Mul' object is not callable
我可以将此表达式转换为lambda函数,该函数将处理数字:

>>> f = lambdify(x, f)
>>> f(10)
-5.440211108893697
但它不适用于符号:

>>> f = lambdify(x, f)
>>> f(a)
TypeError: loop of ufunc does not support argument 0 of type Symbol which has no callable sin method
我知道*.subs方法,但我对这个符号感兴趣:

>>> a = Symbol('a')
>>> f(a)

怎么做?

f=lambda x:sin(x)*x
嗯,真的那么简单吗?是的,可能太简单了……将
type(sin(x)*x)
type(lambda x:sin(x)*x)
比较一下,在您的例子中,看起来您只需要一个上面提到的普通Python lambda函数。在其他情况下,也可以使用sympy的
Lambda
函数,该函数提供了一个“符号”函数。这在例如
ImageSet
中使用。根据
lambdify
文档,它将
sin(x)
转换为
np.sin(x)
。就是
np.sin
不能处理
符号
。它适用于数字和数字数组。正如错误所说,对于一个非数字对象,
numpy
code试图做
x.sin()
f=lambda x:sin(x)*x
呃,它真的那么简单吗?是的,它可能太简单了……比较
type(sin(x)*x)
type(lambda x:sin x)*x)
在您的例子中,看起来您只需要一个简单的Python lambda函数,如上所述。在其他情况下,也可以使用sympy的
Lambda
函数,该函数提供了一个“符号”函数。这在例如
ImageSet
中使用。根据
lambdify
文档,它将
sin(x)
转换为
np.sin(x)
。就是
np.sin
不能处理
符号
。它适用于数字和数字数组。正如错误所说,对于非数字对象,
numpy
代码尝试执行
x.sin()