首页 文章

Python:SymPy lambdify abs用于NumPy

提问于
浏览
2

我使用SymPy进行表达式的符号操作,使用NumPy对大量数据进行评估 . 为了加快速度,我使用sympy.lambdify,但我不能让abs工作 .

import sympy
import numpy as np

x = sympy.symbols('x',real=True)

def f(x):
    return 1-sympy.Abs(x)

def g(x):
    return 1-sympy.sqrt(x)


fl = sympy.lambdify(x,f(x),'numpy')
gl = sympy.lambdify(x,g(x),'numpy')
gl(1) # success
gl(np.array([1,2,3]))
fl(2) # NameError: global name 'Abs' is not defined
fl(np.array([1,2,3])) # Same error

一个选项是对lambdify调用使用'sympy'参数,但是我不能使用数组 . 我尝试过使用sympy.abs和numpy.abs,但没有成功 .

我在一个程序中使用它来解决使用逆替换和一些列表积分的繁琐积分,但是使用abs函数而不是显式处理不同区域的选项会非常方便 .

sympy.Abs确实是定义的

提前致谢

2 回答

  • 2

    您可以通过将 Abs 映射到 abs 来解决此问题,例如 lambdify(x, f(x), ["numpy", {'Abs': numpy.abs}]) . 当然,如果可能的话,升级SymPy是一个更好的解决方案 .

  • 1

    这看起来像是在SymPy的最新版本中修复的错误:https://code.google.com/p/sympy/issues/detail?id=2654它适用于Python 2.7.9,SymPy 0.7.3和Python 3.3.5,SymPy 0.7.5 .

相关问题