哪个SWIG typemap从C ++指针到numpy数组?

时间:2013-09-12 16:37:15

标签: c++ python arrays numpy swig

我想在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消失了?我觉得我错过了重要的事情。

非常感谢,我尽可能地为这个问题尽量减少我的代码。我是新手,请不要犹豫,告诉我如何激活颜色代码,使其更具可读性。

0 个答案:

没有答案