如何使用 SWIG 将 C++ 数组转换为 Python 列表?

wbi*_*tor 0 c++ python arrays swig list

我正在尝试用 C++ 编写一段代码,它可以生成一个数组并将其作为 Python 列表返回。据我了解,我可以使用 numpy.i 中的类型映射将列表作为 NumPy 数组返回,但我正在使用的某些集群上未安装 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;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够在 Python 中使用它,如下所示:

from get_rand_list import *
list = get_rand_list(10)
Run Code Online (Sandbox Code Playgroud)

这将返回一个包含 10 个随机浮点数的 Python 列表。如何使用 SWIG 类型映射来包装 C++ 例程来执行此操作?如果有一种更简单的方法,需要对 C++ 例程进行一些小的修改,那很可能没问题。

Oli*_*ver 5

由于您使用的是 C++,因此最简单的是使用 STL:SWIG 知道如何将 std::vector 转换为 Python 列表,因此使用

std::vector<double> get_rand_list(int length) { ... }
Run Code Online (Sandbox Code Playgroud)

不要忘记%import std_vector.i。这个技巧通常非常有用,请参阅SWIG 文档的库部分以了解其他预先编写的类型映射。始终支持预先编写的类型映射而不是自己制作。