我想在SWIG中映射一个带有numpy数组的C ++ double * vec类型,所以我读了这些文档: http://docs.scipy.org/doc/numpy/reference/swig.interface-file.html,特别是“常见示例”部分 和http://www.swig.org/Doc1.3/Python.html#Python_nn18。
我无法理解SWIG(int len,double * ivec)实际上是一个(int,numpy.array),而不是一个numpy数组?尽管我使用了numpy.i typemaps。我尝试了以下方法:
/* test3.cpp */
#include <cstring>
#include <iostream>
#include <cmath>
void abel(int len1, double* ivec, int len2, double* ovec)
{
std::cout << "Hello" << std::endl;
return;
}
和
/*test3.h*/
#ifndef TEST3_H_INCLUDED
#define TEST3_H_INCLUDED
#include <cstring>
#include <iostream>
#include <cmath>
void abel(int len1, double* ivec, int len2, double* ovec);
#endif // TEST3_H_INCLUDED
我将C ++类型(int size,double * ivec)与numpy.i typemap (int DIM1,double * INPLACE_ARRAY1),juste链接在一起scipy doc
/*test3.i*/
%module Amod
%{
#define SWIG_FILE_WITH_INIT
#include "test3.h"
%}
%include "numpy.i"
%init %{
import_array();
%}
%apply (int DIM1, double* INPLACE_ARRAY1) {(int len1, double* ivec), (int len2, double* ovec)};
%include "test3.h"
我在文档中编译解释为:
swig -c++ -python test3.i
g++ -fPIC -c test3.cpp
g++ -fPIC -c test3_wrap.cxx -I/usr/include/python2.7
g++ -shared test3.o test3_wrap.o -o _Amod.so
我可以毫无问题地在python中导入Amod但是:
>>>import Amod as ab
>>>import numpy as np
>>>a = np.array([1.0,2.0,3.0])
>>>ab.abel()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: abel() takes exactly 2 arguments (0 given)
>>>ab.abel(a,a)
Hello
>>>ab.abel(3,a,3,a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: abel() takes exactly 2 arguments (4 given)
出了什么问题?为什么integeres arg消失了?我觉得我错过了重要的事情。
非常感谢,我尽可能地为这个问题尽量减少我的代码。我是新手,请不要犹豫,告诉我如何激活颜色代码,使其更具可读性。