我正在尝试使用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,但是在这种情况下我无法弄清楚如何使用它?也许我甚至不需要它,我不确定。任何帮助将不胜感激!