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

How to convert a C++ array to a Python list using SWIG?

本文关键字:转换 Python 列表 数组 何使用 SWIG      更新时间:2023-10-16

我正在尝试在C 中编写一块代码,该代码可以产生数组并将其作为python列表返回。我知道我可以使用numpy.i中的Typemaps将列表返回为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 Typemaps包装C 例程来执行此操作?如果有一种更简单的方法需要对C 例程进行一些小的修改,这很可能是可以的。

由于您使用的是C ,最容易使用stl:Swig知道如何将std :: vector转换为Python列表,因此请使用

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

不要忘记%导入std_vector.i。通常,此技巧非常有用,请参阅SWIG文档的库部分,以获取其他类型的书面。始终偏爱预先编写的打字,而不是自己制作。

这个问题已经回答了几次

从swig返回Double *作为python list

swig c-to-python int array