我正在使用scipy.integrate.quad(f, a, b, args=(c,))
在f
和a
之间集成函数b
,并添加了另一个参数c
。您可以将f
视为
f = lambda x, y: x*y
据我了解,该函数需要a
,b
,c
为浮点值。但是,我有许多积分需要解决,所有积分都具有相同的功能,只有a
,b
和c
的向量。迭代所有向量是非常低效的。有没有办法加速/矢量化这个操作?
答案 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),但我没有对此进行测试。