我正在尝试使用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用于将numpy与SWIG一起使用,但在这种情况下我不知道如何使用它?也许我甚至不需要它,我不确定。任何帮助,将不胜感激!
这正是我现在正在经历的,除非添加numpy.i,否则什么都不会改变!您是否找到解决方案?
很抱歉将其作为答案,但我目前没有足够的声誉积分来发表评论。