Я бы хотел передать целочисленный элемент из массива numpy в python в функцию c ++, которая перехватывает его как целое число c ++ с помощью SWIG.
Чего мне здесь не хватает?
add_vector.i
%module add_vector
%{
#define SWIG_FILE_WITH_INIT
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION // gets rid of warning
#include "add_vector.h"
%}
%include "numpy.i"
%init %{
import_array();
%}
%include "add_vector.h"
add_vector.h
#include <iostream>
void print_int(int x);
add_vector.cpp
#include "add_vector.h"
void print_int(int x) {
std::cout << x << std::endl;
}
tester.py
import add_vector as vec
import numpy as np
a = np.array([1,2,3])
print(a[1])
vec.print_int(a[1])
ВЫХОД
2
Traceback (most recent call last):
File "tester.py", line 6, in <module>
vec.print_int(a[1])
TypeError: in method 'print_int', argument 1 of type 'int'
Чтение из руководства numpy.i (https://docs.scipy.org/doc/numpy-1.13.0/reference/swig.interface-file.html#numpy-array-scalars-and-swig), Я скопировал пифрагментыФайл .swg в мой рабочий каталог, но ничего не изменилось.
Я также попробовал несколько директив% apply для передачи int и int *, но это еще ничего не изменило. получая ту же ошибку TypeError, которую я перечислил выше.
Версии: numpy 1.17.3; swig 2.0.12; python 3.7.3; numpy.i копируется в мой рабочий каталог с: /usr/lib/python2.7/dist-packages/instant/swig/numpy.i