【问题标题】:Converting a function from sympy to numpy (attribute error)将函数从 sympy 转换为 numpy(属性错误)
【发布时间】:2014-02-16 22:54:17
【问题描述】:
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)

如果我用多项式替换我的函数,或者如果我将 trig 函数直接放入 diff 运算符,则此方法有效。但是在这种格式中,我得到 AttributeError: sin。

基本上,我认为 python 不能将 func 识别为它知道如何符号集成的三角函数。我可以只使用 sympy import sin 然后一切正常,但后来我被 func 在 sympy 命名空间中引用 sin 卡住了,而且我将来想对 func 做一些事情,这需要在 numpy 命名空间中使用 sin 来定义.

【问题讨论】:

  • np.sin不会接受sympy.core.symbol.Symbol,我怀疑是否有任何明智的方法可以做到这一点。你为什么要这样做?
  • @M4rtini 我想使用 matplotlib 绘制 func,如果 func 是在 sympy 命名空间中使用 sin 定义的,则会导致错误。

标签: python sympy


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这根本不是您使用 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 函数的导数进行lambdify,就没有办法将它从 sympy 命名空间中取出?
    • @user1378571,您应该退后几步,询问您最初尝试做的事情,而不是您为完成它所做的事情。你正在介绍一些不符合你需要的东西。 perlmonks.org/index.pl?node_id=542341
    猜你喜欢
    • 2021-10-04
    • 2016-05-27
    • 2019-11-11
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    相关资源
    最近更新 更多