什么是集成返回数组的函数的pythonic方法(使用scipy quad)?

时间:2015-10-30 18:11:59

标签: python arrays scipy

我有一个返回数组的函数:

def fun(x,a):
    return [a*x,a*x**2]

我想整合它(使用scipy quad):

def integrate(a):
    return quad(fun[0],0,1,args=a)
print integrate(1)

这会TypeError: 'function' object is not subscriptable 什么是正确的pythonic方式?

2 个答案:

答案 0 :(得分:4)

fun周围创建一个包装函数,以选择数组的元素。例如,以下内容将集成数组的第一个元素。

from scipy.integrate import quad

# The function you want to integrate
def fun(x, a):
    return np.asarray([a * x, a * x * x])

# The wrapper function
def wrapper(x, a, index):
    return fun(x, a)[index]

# The integration
quad(wrapper, 0, 1, args=(1, 0))

按照@ RobertB的建议,你应该避免定义函数int,因为它与内置名称混淆。

答案 1 :(得分:3)

你的函数返回一个数组,integrate.quad需要一个浮点数进行整合。所以你想给它一个函数,它返回你的数组中的一个元素而不是函数本身。您可以通过快速lambda

来实现
def integrate(a, index=0)
    return quad(lambda x,y: fun(x, y)[index], 0, 1, args=a)