Как использовать numpy.i в Swig? - PullRequest
1 голос
/ 19 октября 2019

Я пытаюсь обернуть некоторый код C ++ с помощью Python, используя swig, и мне нужно отправить массивы NumPy в векторный класс c ++ для некоторой обработки.

Моя проблема в том, что я не могу получить доступ к "numpy.i" в моем swig .i файле.

Как я могу импортировать / включить numpy.i?

add_vector.i

%module add_vector
%{
    #define SWIG_FILE_WITH_INIT
    #include "add_vector.h"
%}

%include "numpy.i"

%init %{
import_array();
%}

%include std_vector.i
%template(vecInt) std::vector<int>;

%include "add_vector.h"

Makefile

all:
rm -f *.so *.o *_wrap.* *.pyc *.gch add_vector.py
swig -c++ -python add_vector.i
g++ -O0 -g3 -fpic -c add_vector_wrap.cxx add_vector.h add_vector.cpp -I/home/tools/anaconda3/pkgs/python-3.7.3-h0371630_0/include/python3.7m/
g++ -O0 -g3 -shared add_vector_wrap.o add_vector.o -o _add_vector.so

tester.py

import add_vector as vec 
import numpy as np

a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.empty(len(a))

vec.add(c,a,b)

print('c:', c)

Вывод:

rm -f *.so *.o *_wrap.* *.pyc *.gch add_vector.py
swig -c++ -python add_vector.i
add_vector.i:7: Error: Unable to find 'numpy.i'
Makefile:2: recipe for target 'all' failed
make: *** [all] Error 1

Я использую debian, если это имеет значение.

Спасибо!

1 Ответ

2 голосов
/ 19 октября 2019

Скопируйте numpy.i в ту же папку, что и add_vector.i.

Или используйте параметр командной строки -lifile и укажите путь к файлу numpy.i.

swig -l/path/to/numpy.i ...

Список параметров командной строки SWIG см. http://www.swig.org/Doc3.0/SWIGDocumentation.html#SWIG_nn2

...