Как преобразовать массив C ++ в список Python, используя SWIG?

0

Я пытаюсь написать фрагмент кода в C++, который может создать массив и вернуть его как список Python. Я понимаю, что я могу вернуть список в виде массива NumPy, используя typemaps в numpy.i, но NumPy не установлен на некоторых из кластеров, которые я использую. Основное различие между этим вопросом и некоторыми подобными, которые я видел здесь, это то, что я хочу вернуть массив C переменной длины в виде списка Python.

Урезанная C++ процедура приведена ниже:

/* File get_rand_list.cpp */
#include "get_rand_list.h"

/* Define function implementation */ 
double* get_rand_list(int length) {

  output_list = new double[length];

  /* Populate input NumPy array with random numbers */
  for (int i=0; i < length; i++)
    output_list[i] = ((double) rand()) / RAND_MAX;

  return output_list;
}

Я хотел бы иметь возможность использовать это в Python так:

from get_rand_list import *
list = get_rand_list(10)

Который вернет список Python из 10 случайных поплавков. Как я могу использовать шаблоны типов SWIG для обертки C++ для этого? Если есть более простой способ, требующий небольших изменений в C++, который, скорее всего, будет прекрасен.

  • 0
    Вернуть ... что?
Теги:
arrays
list
swig

2 ответа

3

Поскольку вы используете C++, проще всего использовать STL: SWIG знает, как преобразовать std :: vector в список Python, поэтому используйте

std::vector<double> get_rand_list(int length) { ... }

Не забудьте указать% import std_vector.i. Этот трюк очень полезен в целом, см. Раздел "Библиотека" документов SWIG для других типов, предварительно написанных. Всегда предпочитайте заранее написанные типовые примеры, чтобы сделать свой собственный.

2

На этот вопрос уже несколько раз ответили

return double * from swig как список python

SWIG C-to-Python Int Array

  • 0
    Но текущие ответы работают только для заданного размера массива. Я заинтересован в массивах переменной длины.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню