swig从numpy.ARRAY()为c代码生成python包装器-IN_数组和ARGOUT

swig从numpy.ARRAY()为c代码生成python包装器-IN_数组和ARGOUT,python,c,numpy,swig,Python,C,Numpy,Swig,我正在尝试使用swig4为我的C代码生成python包装器。 由于我没有任何经验,我在将numpy数组转换为c数组以及从c数组返回numpy数组时遇到了一些问题 这是我的存储库和所有代码: 这就是我的swig文件的样子。 我猜最后的%apply部分是错误的,但我不知道如何匹配它 当我通过执行build.sh文件构建项目时,创建的包装器如下所示: def干膜厚度(x,x,N): 返回_dft.dft(x,x,N) 在这里,我可以看到swig没有识别我的%apply,因为我希望它看起来像这样 d

我正在尝试使用swig4为我的C代码生成python包装器。 由于我没有任何经验,我在将numpy数组转换为c数组以及从c数组返回numpy数组时遇到了一些问题

这是我的存储库和所有代码:

这就是我的swig文件的样子。 我猜最后的%apply部分是错误的,但我不知道如何匹配它

当我通过执行build.sh文件构建项目时,创建的包装器如下所示:

def干膜厚度(x,x,N):
返回_dft.dft(x,x,N)
在这里,我可以看到swig没有识别我的%apply,因为我希望它看起来像这样

def干膜厚度(x):
#N是len(x)
#做点什么
返回X#X是len(X)=len(X)的numpy.array()
我想这样使用它:

X=dft(X)
很明显,我是通过执行以下命令得到这个错误的:

File "example.py", line 12, in <module>
    X = dft(x)
TypeError: dft() missing 2 required positional arguments: 'X' and 'N'
文件“example.py”,第12行,在
X=干膜厚度(X)
TypeError:dft()缺少2个必需的位置参数:“X”和“N”
我必须自己写打字图吗?或者我可以使用numpy.I吗。 以及在一个函数中使用IN_ARRAY1和ARGOUT_ARRAY1的类型映射是如何工作的


谢谢你的帮助。

我正在做类似的工作,看到这篇文章没有答案。然后我意识到@schnauzbartS已经解决了这个问题,他的代码在他的github上(在问题中链接),这是一个很好的例子

我认为,如果问题是如何使用IN_ARRAY1和ARGOUT_ARRAY1进行类型映射,那么人们可能会发现一个简单的例子很有用:

警告:在我意识到python中的IN_数组必须是float32而不是64格式(在我的例子中是float数组)之前,我一直在努力编写代码。不知道为什么。我发现的另一件事是ARGOUT_ARRAY总是需要数组大小的整数输入。因此,在python端,我最终调用了该函数

myswigfunc(outarraysize,inarray,inarray2)
其中outarraysize用于ARGOUT_数组,其他输入例如位于_数组_1和_2中

感谢您的回复:)。我在六个月前发布了我是如何解决的,解决方案在我的回购协议中,但@似乎删除了我的帖子。不知道为什么…哦!我明白了!:)是的,我很高兴你的回购被链接到那里,这肯定会为一些人节省很多时间!
File "example.py", line 12, in <module>
    X = dft(x)
TypeError: dft() missing 2 required positional arguments: 'X' and 'N'
%apply (double* IN_ARRAY1    , int DIM1) {(double* vec , int m)};
%apply (double* ARGOUT_ARRAY1, int DIM1) {(double* vec2, int n)};
myswigfunc(outarraysize,inarray,inarray2)