簡體   English   中英

使用 LowLevelCallable 與 scipy quad 集成:如何傳遞 user_data?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM