Bas*_*ein 5 c python swig type-conversion
我有代码C,我想在其中使用python,我用过SWIG来包装 C 代码,并成功在我的 python 代码中导入了一个 python 模块。
现在我有以下代码:
import flame
import numpy as np
data = np.random.rand(3,2).astype(np.float32, copy=False)
N = 3
M = 2
print data
flameobject = flame.Flame_New()
flame.Flame_SetDataMatrix( flameobject, data, N, M, 0 )
Run Code Online (Sandbox Code Playgroud)
这给出了错误:
TypeError: in method 'Flame_SetDataMatrix', argument 2 of type 'float *[]'
Run Code Online (Sandbox Code Playgroud)
我知道我应该将 a 传递float array pointer给该方法,但是如何将我的 Numpy 多维数组转换为正确的类型?
有 SciPy 文档说明了这一点:How to pass numpy arrays to C code via SWIG (反之亦然)。看看这里。
基本上,有一个 swig 接口文件numpy.i,您可以按以下方式使用。在您的 swig 接口文件中包括:
%{
#define SWIG_FILE_WITH_INIT
%}
%include "numpy.i"
%init %{
import_array();
%}
Run Code Online (Sandbox Code Playgroud)
然后在提及 C 函数之前添加接口文件:
%apply ( float* IN_ARRAY2, int DIM1, int DIM2 ) {
(float* your_array_parameter_name, int N_parameter_name, int M_parameter_name)
};
Run Code Online (Sandbox Code Playgroud)
这适用于普通的 Cfloat数组。我不太确定 afloat* []是什么。您可能需要为此编写自己的类型映射,为此您可以使用numpy.i. 但这一切都在上面提到的 numpy.i 文档或相关的swig typemap 文档中进行了解释