Я хочу обернуть некоторый код c ++ в python с помощью swig, и мне нужно иметь возможность использовать numpy.i для преобразования numpy-массивов в векторы.
Это был довольно неприятный процесс, так какЯ не смог найти в Интернете никакой полезной информации о том, откуда я на самом деле получаю numpy.i.
Это то, что у меня сейчас работает:
numpy 1.17.3
swig 2.0.12
python 3.7.3
Debian 4.9.2
Из прочтения https://docs.scipy.org/doc/numpy/reference/swig.interface-file.html Мне сказали, что numpy.i должен находиться в tools / swig / numpy.i, хотя это единственное место на моей машине, где я могу найти numpy.i находится в папке python 2.7, из которой я обновился. Моя рабочая версия python (3.7.3) не содержит такого файла.
$ locate numpy.i
/usr/lib/python2.7/dist-packages/instant/swig/numpy.i
То, что я пробовал:
копирование numpy.i (как описано выше) в мою рабочую папку. Это, по крайней мере, распознается моим файлом test.i, когда я вызываю% include «numpy.i», но, похоже, он не позволяет использовать вызовы numpy.i.
Скопировав этот код https://github.com/numpy/numpy/blob/master/tools/swig/numpy.i в новый файл с именем numpy.i и поместив его в свою папку, но я получаю много ошибок при попытке его запустить.
Есть ли стандартный способ получить правильную версию numpy.i? Где бы я мог скачать его и куда его поместить?
Ниже приведен код, приведенный ниже:
test.i:
%module test
%{
#define SWIG_FILE_WITH_INIT
#include "test.h"
%}
%include "numpy.i" //this doesn't seem to do anything
%init %{
import_array();
%}
%apply (int DIM1) {(char x)}; //this doesn't seem to do anything
%include "test.h"
test.h:
#include <iostream>
void char_print(char x);
test.cpp:
#include "test.h"
void char_print(char x) {
std::cout << x << std::endl;
return;
}
tester.py:
import test
test.char_print(5) #nothing is printed, since this isn't converted properly to a char.
Это простой пример, но яЯ пытался использовать numpy.i разными способами (в том числе копировать и вставлять код других людей, который работает для них), но он постоянно ничего не меняет, есть ли он в моем файле test.i или нет.
Где / как я могу получить numpy.i?