我需要使用ctypes函数来减少python中quad的运行时间。这是我最初的问题original question,但现在我知道我需要遵循什么道路了。我需要遵循与这里的similar problem link相同的步骤。
然而,在我的例子中,将在数值积分中处理的函数将调用另一个python函数。如下所示:
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中指定函数?等同于此:
//testlib.c
double f(int n, double args[n])
{
return args[0] - args[1] * args[2]; //corresponds to x0 - x1 * x2
}感谢您的任何意见!
发布于 2017-03-08 09:57:25
You can do this using ctypes's callback function facilities.
也就是说,如果你的函数从Python调用一些东西,你是否真的会获得任何速度上的提升是有争议的。ctypes加速集成本质上有两个原因:(1)被积函数本身作为编译的C语言比作为Python字节码更快,以及(2)它避免了从编译的(Fortran!)故障诊断例程。您提出的建议完全消除了这些性能提升的第二个来源,如果您多次进行这样的调用,甚至可能会增加惩罚。但是,如果被积函数的大部分执行时间是在它自己的代码中,而不是在您需要调用的这些其他Python函数中,那么您可能会看到一些好处。
发布于 2019-11-04 03:06:15
正如在the other question中所回答的那样,quadpy的矢量化计算能力就是为了节省时间。
https://stackoverflow.com/questions/39742924
复制相似问题