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()
。