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

时间:2014-02-03 23:31:46

标签: python c++ arrays list swig

我正在尝试用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;
}

我希望能够在Python中使用它:

from get_rand_list import *
list = get_rand_list(10)

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

2 个答案:

答案 0 :(得分:3)

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

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

不要忘记%import std_vector.i。这个技巧一般非常有用,请参阅Library section of SWIG docs预编写的其他类型图。始终倾向于使用预先编写的类型图来制作自己的类型图。

答案 1 :(得分:2)