所以我遵循reference如何使用LowLevelCallable。问题是,我显然无法像以前那样将参数传递给dblquad函数(这会破坏我想加速的所有代码)。我的c代码如下所示:
#include <math.h>
// This function is f = ax + by
double f (int n, double *x) {
return 2*(x[2]*x[0]+x[3]*x[1]);
}
然后是python代码
import os, ctypes
from scipy import LowLevelCallable
from scipy.integrate import dblquad
lib = ctypes.CDLL(os.path.abspath('./testlib.so'))
lib.f.restype = ctypes.c_double
lib.f.argtypes = (ctypes.c_int, ctypes.POINTER(ctypes.c_double))
func = LowLevelCallable(lib.f)
for a in [1,2,3]:
for b in [1,2,3]:
print(dblquad(func, 0,1, lambda x: 0, lambda y: 1, args = [a,b])[0], a+b)
//编辑:有一个错字。现在它有效。没关系。