2016-09-28 68 views
0

我需要使用ctypes函数来减少python中quad的运行时间。这是我原来的问题original question,但现在我知道我需要遵循什么路径。我需要按照与此处similar problem link相同的步骤操作。optimazing使用ctypes python quad

但在我的情况下,将在数值积分中处理的函数调用另一个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) 

其中停产仅仅是我在我的代码决定一个标量,并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 
} 

任何输入赞赏!

回答

0

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

这就是说,无论是否会真正实现任何速度下的收益,如果你的函数调用Python的东西是值得商榷的。 ctypes加快集成的基本原因有两个:(1)集成函数本身比编译的C更快于Python字节码,(2)避免了从编译的(Fortran!)QUADPACK例程回调Python。你提出的建议完全消除了这些性能提升的第二个来源,如果你多次打这样的电话,甚至可能会增加惩罚。但是,如果被积函数的大部分执行时间在自己的代码中,而不是在您需要调用的其他Python函数中,那么您可能会看到一些好处。