首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矢量化scipy.integrate.quad

矢量化scipy.integrate.quad
EN

Stack Overflow用户
提问于 2015-09-12 20:58:48
回答 3查看 1.8K关注 0票数 2

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

代码语言:javascript
复制
f = lambda x, y: x*y 

据我所知,该函数要求abc为浮点值。但是,我有许多积分要解,所有积分都使用相同的函数,就在abc的向量上。迭代所有的向量是非常低效的。有什么方法可以加速/向量化这个操作吗?

EN

回答 3

Stack Overflow用户

发布于 2015-09-14 04:35:47

遗憾的是,integrate.quad不支持这一点。

您可能会发现自己使用高斯求积会更好一些:scipy.integra.fixed_quad会阻塞array_like输入,但计算根和权重的低级例程应该可以工作。请参阅“正交多项式的根和权”部分here。不过是YMMV。

票数 2
EN

Stack Overflow用户

发布于 2020-03-02 00:10:51

与此同时,numpy通过使用integrate中介绍的一个示例实现了numpy.vectorize,对此做出了回应。以下是包含两个变量的修改后的示例:

代码语言:javascript
复制
fun2int = lambda x, a: np.sqrt(x+a)
intfun = lambda a: integrate.quad(fun2int, 0, 4, args=(a))[0]
vec_int = np.vectorize(intfun)
vec_int(np.linspace(0,2,5))
Out[1]: array([5.33333333, 6.12825877, 6.78689326, 7.37435069, 7.91234089])

还有1.4.1的integrate.quad_vec (scipy.version ),但我没有测试它。

票数 2
EN

Stack Overflow用户

发布于 2015-09-12 21:26:19

如果我很好地理解了这个问题,我将只对一个a,b,c参数数组运行函数。例如,将包含两组a,b,c的数组设置为:

代码语言:javascript
复制
a = np.array([[0.1,0.2,0.3], [0.9,0.8,0.3]])

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

代码语言:javascript
复制
L = []

并在数组中循环:

代码语言:javascript
复制
for a,b,c in a:

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

结果是一个元组列表:

代码语言:javascript
复制
[(0.004500000000000001, 4.996003610813206e-17), (-0.025499999999999995, 2.8310687127941485e-16)]

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32539106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档