Возврат массива c из кода, заключенного в cython, в python, - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь запустить свой код C ++ из python, так как я хочу связать его с программным обеспечением с открытым исходным кодом, имеющим интерфейс python, поэтому я использовал cython для обертывания. Мой код C ++ может быть скомпилирован из Python, но у меня есть некоторые проблемы с возвратом результатов, которые являются векторами с плавающей точкой. Я могу вернуть одно число с плавающей точкой или целое число в Python, но не вектор. Я попытался вернуть указатель, как это обычно делается для функций C ++, но python не распознает форму указателя C ++.
Вот упрощенный код, чтобы показать, что я имею в виду.

Мой файл .hpp:

#include "mpi.h"

float my_cppfun(int D);

мой .cpp файл:

#include <stdio.h>
#include <stdlib.h>
#include <vector>

#include "my_cpp.hpp"


float  my_cppfun(int D)
 {
  float DD[D];
  int i; 
  for (i=0;i<D;i++){
    DD[i]=i;
  }

  return DD[i-1];
  //return DD  instead of DD[i-1]
  }

мой файл .pyx:

cdef extern from "my_cpp.hpp":
    float my_cppfun(int)

def my_cpp(int D):

    return my_cppfun(D)    

мой .py файл:

from mpi4py import MPI
from pympi import my_cpp

y=my_cpp(3)
print y

Существует также файл setup.py, и он работает в данный момент. Мне интересно, как я могу вернуть массив DD вместо одного значения с плавающей запятой (DD [i-1]). Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 31 октября 2018

Вам нужно будет составить список и вернуть его.

Документация для Список должна помочь. PyList_New, PyList_SetItem и т. Д.

...