Передача вектора C ++ в Python через Cython - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь передать вектор C ++ обратно в Python с помощью Cython, и я не уверен, что делаю не так. Он компилируется, но возвращаемый объект - None.

PyClass.py файл

import numpy as np
cimport numpy as np
from libcpp.vector cimport vector

cdef extern from "construct_neighborhood_graph.h":
    cdef vector[int] construct_neighborhood_graph_cy(int n, 
                                                     double * X)

cdef construct_neighborhood_graph_np(n, 
                                     np.ndarray[double, ndim=2, mode="c"] X):
    construct_neighborhood_graph_cy(n,
                                    <double *> np.PyArray_DATA(X))


class PyClass:
    def fit_predict(self, X):

        X = np.ascontiguousarray(X)
        n, d = X.shape

        neighbors = construct_neighborhood_graph_np(n, X)

neighbors здесь нет!

construct_neighborhood_graph.h file

#include <vector>
using namespace std;

vector<int> construct_neighborhood_graph_cy(int n, 
                                            double * X,
                                            int * num_neighbors) {

    vector<int> neighbors;

    for (int i = 0; i < n; i++) {
      neighbors.push_back(i);
    }

    return neighbors;
}

Нужно ли мне объявлять класс в Python? Или можно просто объявить функцию?

...