SWIG将numpy.int64用作c ++函数的int

时间:2017-02-24 09:52:12

标签: python c++ numpy swig

我正在尝试使用SWIG生成一个python包装器,我遇到了一个问题,我无法在我的c ++函数中使用numpy数据类型。我把它归结为一个相当小的例子:

my_cpp_function.h:

int foo(int x_i, int y_i);

my_cpp_function.cpp:

#include "my_cpp_function.h" 

int foo(int bar, int baz){
    return bar + baz;
}

my_cpp_function.i:

%module my_cpp_function

%{
    #include "my_cpp_function.h"
%}

%include "my_cpp_function.h"

编译如下:

$ g++ -std=c++11 -c my_cpp_function.cpp
$ swig -c++ -python my_cpp_function.i
$ g++ -std=c++11 -c -fPIC my_cpp_function_wrap.cxx -I/usr/include/python3.5 -I/usr/lib/python3.5
$ g++ -std=c++11  -shared -Wl,-soname,_my_cpp_function.so -o _my_cpp_function.so my_cpp_function.o my_cpp_function_wrap.o

然后在python3:

>>> from my_cpp_function import foo
>>> foo(1,2) 
3
>>> import numpy as np
>>> test = np.array([1,2])
>>> foo(test[0], test[1])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: in method 'cost', argument 1 of type 'int'
>>> foo(test[0].item(), test[1].item())
3

所以它似乎对numpy.int64不满意。我已经看到有一个numpy.i用于使用SWIG的numpy,但是在这种情况下我无法弄清楚如何使用它?也许我甚至不需要它,我不确定。任何帮助将不胜感激!

0 个答案:

没有答案