[英]How to pass several additional parameters to numba cfunc passed as LowLevelCallable to scipy.integrate.quad
[英]Integrating with scipy quad using LowLevelCallable: How to pass user_data?
所以我按照參考如何使用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)
// 編輯:有一個錯字。 現在它起作用了。 沒關系。
如上所述這里,棘手的事情是包括數組x您的參數,即X =(X0,X1,...,XN,T0,T1,...,TM),其中X0,... xn為該坐標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.