【问题标题】:How to convert a C++ array to a Python list using SWIG?如何使用 SWIG 将 C++ 数组转换为 Python 列表?
【发布时间】:2014-02-03 23:31:46
【问题描述】:

我正在尝试用 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++ 例程进行一些小的修改,那很可能没问题。

【问题讨论】:

    标签: python c++ arrays list swig


    【解决方案1】:

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

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

    别忘了 %import std_vector.i。这个技巧通常非常有用,请参阅Library section of SWIG docs 了解其他预先编写的类型图。总是喜欢预先编写的类型图而不是自己制作。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 但目前的答案只适用于设定的数组大小。我对可变长度数组感兴趣。
      猜你喜欢
      • 1970-01-01
      • 2011-05-07
      • 2013-10-26
      • 2021-10-29
      • 2015-08-26
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      相关资源
      最近更新 更多