首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ctype优化python quad

使用ctype优化python quad
EN

Stack Overflow用户
提问于 2016-09-28 17:12:44
回答 2查看 161关注 0票数 0

我需要使用ctypes函数来减少python中quad的运行时间。这是我最初的问题original question,但现在我知道我需要遵循什么道路了。我需要遵循与这里的similar problem link相同的步骤。

然而,在我的例子中,将在数值积分中处理的函数将调用另一个python函数。如下所示:

代码语言:javascript
复制
from sklearn.neighbors import KernelDensity
import numpy as np
    
funcA = lambda x: np.exp(kde_bad.score_samples([[x]]))
quad(funcA, 0, cut_off)

其中cut_off是我在代码中决定的标量,kde_bad是使用KernelDensity创建的内核对象。

所以我的问题是,我需要如何在C中指定函数?等同于此:

代码语言:javascript
复制
//testlib.c
    
double f(int n, double args[n])    
{
   return args[0] - args[1] * args[2]; //corresponds to x0 - x1 * x2
}

感谢您的任何意见!

EN

回答 2

Stack Overflow用户

发布于 2017-03-08 09:57:25

You can do this using ctypes's callback function facilities.

也就是说,如果你的函数从Python调用一些东西,你是否真的会获得任何速度上的提升是有争议的。ctypes加速集成本质上有两个原因:(1)被积函数本身作为编译的C语言比作为Python字节码更快,以及(2)它避免了从编译的(Fortran!)故障诊断例程。您提出的建议完全消除了这些性能提升的第二个来源,如果您多次进行这样的调用,甚至可能会增加惩罚。但是,如果被积函数的大部分执行时间是在它自己的代码中,而不是在您需要调用的这些其他Python函数中,那么您可能会看到一些好处。

票数 0
EN

Stack Overflow用户

发布于 2019-11-04 03:06:15

正如在the other question中所回答的那样,quadpy的矢量化计算能力就是为了节省时间。

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

https://stackoverflow.com/questions/39742924

复制
相关文章

相似问题

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