[英]NumPy C extension with SWIG unknown length array
我想用SWIG包裝一個C函數。 該函數采用幾個數組(長度相同)作為輸入,並返回另外三個數組。 但是,不可能事先預測返回數組的長度,並且這些數據是在函數中動態分配的。 是否可以用SWIG(使用numpy.i)包裝這樣的函數,如果是這樣的話怎么樣? 簡化的函數聲明如下所示:
int func(double **a, double **b, long int *N, double *x, double *y, long int *Nx, long int *Ny);
其中Nx
和Ny
事先已知但N
( a
和b
的長度)不是,並且a
和b
在函數中被分配(使用malloc
)。
似乎SWIG(或任何其他Python包裝器生成器)不能這樣做。 我最終手工編寫了Python包裝器,這實際上非常簡單,使用PyArray_SimpleNew
或PyArray_SimpleNewFromData
來創建輸出數組。 對於后者,必須格外小心,以免產生內存泄漏。 在玩了一下之后,我發現前者加上一個簡單的memcpy
更安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.