将一个来自sympy的函数转换为numpy格式(属性错误)

4
import numpy as np
import sympy as sym
from numpy import sin
from sympy import symbols, diff

func = lambda x: sin(x)
x    = symbols('x')
print diff(func(x),x)

如果我用一个多项式替换我的函数,或者将三角函数直接放入diff运算符中,这样可以正常工作。但是在这种格式下,我会得到AttributeError: sin。

基本上,我认为Python无法识别func只是一个它知道如何符号化积分的三角函数。我可以让SymPy导入sin,然后事情就可以正常工作,但那样我就必须使用SymPy命名空间中的sin来定义func,并且有些未来的事情我想要做的需要使用在NumPy命名空间中使用sin来定义func。


np.sin不接受sympy.core.symbol.Symbol,我怀疑没有任何明智的方法可以实现这一点。你为什么要尝试这样做呢? - M4rtini
@M4rtini 我想使用matplotlib绘制func,但如果func在sympy命名空间中使用sin定义,则会导致错误。 - Set
2个回答

2

您应该使用 SymPy 函数构建符号表达式,然后使用 lambdify 将它们转换为可以用 NumPy 评估的内容。


0

这不是使用sympy的正确方式。您不能将普通函数与numpy一起使用 - 您需要使用它提供的内容构建符号表达式。

要编写代码以获取sin(x)的导数,您应该执行以下操作:

import sympy as sym
from sympy import sin, symbols, diff

x = symbols('x')
print diff(sin(x), x)

如果您有其他特定的问题需要解决,您需要展示出来。您不能以这种方式混合使用sympy和非sympy的内容,因此无法提供一般性的反馈。


所以一旦我将Sympy函数的导数Lambda化,就没有办法将其从Sympy名称空间中取出? - Set
1
@user1378571,你应该退后几步,询问一下你试图做的最初的事情,而不是你为了完成它所做的事情。你正在引入一些不能满足你需求的东西。http://www.perlmonks.org/index.pl?node_id=542341 - Mike Graham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接