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

问题描述 投票:3回答:1

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

python c++ numpy swig
1个回答
0
投票

这正是我现在正在经历的,除非添加numpy.i,否则什么都不会改变!您是否找到解决方案?

很抱歉将其作为答案,但我目前没有足够的声誉积分来发表评论。

© www.soinside.com 2019 - 2024. All rights reserved.