簡體   English   中英

具有SWIG未知長度數組的NumPy C擴展

[英]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);

其中NxNy事先已知但Nab的長度)不是,並且ab在函數中被分配(使用malloc )。

似乎SWIG(或任何其他Python包裝器生成器)不能這樣做。 我最終手工編寫了Python包裝器,這實際上非常簡單,使用PyArray_SimpleNewPyArray_SimpleNewFromData來創建輸出數組。 對於后者,必須格外小心,以免產生內存泄漏。 在玩了一下之后,我發現前者加上一個簡單的memcpy更安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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