【发布时间】:2015-01-28 07:30:32
【问题描述】:
我正在使用 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
一个选项是使用 'sympy' 参数进行lambdify 调用,但是我不能使用数组。我尝试过使用 sympy.abs 和 numpy.abs,但没有成功。
我在一个程序中使用它来解决繁琐的积分问题,使用反代换和一些表格积分,但是如果使用 abs 函数而不是显式处理不同的区域,它会非常方便。
sympy.Abs 确实定义了
提前致谢
【问题讨论】:
-
错误告诉您
abs函数未定义。它是由sympy定义的吗?然后在f的定义中你需要写sympy.abs(x),而不是简单的abs(x)。 -
这对我有用(除了
gl(np.array([1,2,3])行中缺少的括号。您使用的是哪个 Python? -
@jme:如果我使用 sympy.abs,我会得到同样的错误。
-
@xnx:我使用 Python 2.7.3:如果它适合您,我想知道您使用的是什么版本