Проблема с поиском numpy.i - PullRequest
       31

Проблема с поиском numpy.i

0 голосов
/ 23 октября 2019

Я хочу обернуть некоторый код 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?

1 Ответ

0 голосов
/ 25 октября 2019

Проблема: Файл numpy.i, который я скопировал из пакета python2.7, не совместим, и совместимая версия не включена в пакет установки, когда вы проходите через anaconda (все еще неуверен, почему они это сделали).

Ответ: Найдите, какую версию NumPy вы используете, затем перейдите сюда (https://github.com/numpy/numpy/releases) и загрузите NUMPY- [your_version] .zip, затем специально скопируйте файл numpy.i, находящийся в numpy- [your_version] / tools / swig /. Теперь вставьте этот numpy.i в рабочий каталог вашего проекта.

...