Vectorize scipy.integrate.quad

时间:2015-09-12 12:58:48

标签: python numpy scipy

我正在使用scipy.integrate.quad(f, a, b, args=(c,))fa之间集成函数b,并添加了另一个参数c。您可以将f视为

f = lambda x, y: x*y 

据我了解,该函数需要abc为浮点值。但是,我有许多积分需要解决,所有积分都具有相同的功能,只有abc的向量。迭代所有向量是非常低效的。有没有办法加速/矢量化这个操作?

3 个答案:

答案 0 :(得分:2)

唉,integrate.quad不支持此功能。

可能会找到更好的运气自己使用高斯正方形:scipy.integra.fixed_quad在array_like输入上窒息,但是计算根和权重的低级例程工作。参见“正交多项式的根和权重”部分here。 YMMV虽然。

答案 1 :(得分:0)

如果我很清楚这个问题,我会在a,b,c个参数数组上运行该函数。例如,将两组a,b,c的数组设置为:

a = np.array([[0.1,0.2,0.3], [0.9,0.8,0.3]])

然后设置一个空列表来存储结果:

L = []

并遍历数组:

for a,b,c in a:

    b = integrate.quad(f, a, b, args=(c,))
    L.append(b)

结果是一个元组列表:

[(0.004500000000000001, 4.996003610813206e-17), (-0.025499999999999995, 2.8310687127941485e-16)]

也许有一种更优雅的方式,但希望有所帮助。

答案 2 :(得分:0)

同时numpy通过实施numpy.vectorize对此做出了回应 integrate中包含了一个示例。这是带有两个变量的修改后的示例:

velocity += acceleration
position += velocity + 0.5 * acceleration

也有tegrate.quad_vec(scipy。版本为1.4.1),但我没有对此进行测试。