【问题标题】:Reading c++ 2d array in python swig在 python swig 中读取 c++ 2d 数组
【发布时间】:2017-06-07 23:26:18
【问题描述】:

C++部分 我有一个类a 和一个public 变量2d int 数组b,我想用python 打印出来。(我想访问它的方式是a.b

我已经能够封装大部分代码,现在我可以在python中调用a类中的大部分函数了。

那么如何在 python 中读取 b 呢?如何使用 numpy.i 将其读入 numpy 数组(我找到了一些关于如何使用非变量函数的解决方案)?有没有办法可以读取 c++ 库中的任何数组?或者我必须处理接口文件中的每个变量。

当我尝试在 python 中使用 b 时,现在 b 是 <Swig Object of type 'int (*)[24]' at 0x02F65158>

ps: 1.如果可能我不想修改cpp部分。

  1. 我试图访问一个变量,而不是一个函数。

所以不要向我推荐不能真正回答我问题的链接,谢谢。

【问题讨论】:

    标签: python c++ arrays numpy swig


    【解决方案1】:

    如果您使用一维数组来访问元素,您会发现在语言之间来回传递东西会容易得多,例如arr[y*WIDTH+x].

    由于您使用 C++ 进行操作,您甚至可以将这些数组包装在具有良好 operator()(int x, int y) 方法的类中,以便在 C++ 端使用。

    事实上,这是 Numpy 用于数组的内部表示:它们都是一维的。

    【讨论】:

      【解决方案2】:

      如果您可以添加 C++ 定义的代码 sn-p(或者如果您使用 int**,则添加 C),您的问题会更容易回答。当您说“2d int array”时,您的意思是一般的 int ** 吗?数组大小是否提前知道?

      无论如何,您都可以使用numpy.i,但这取决于您的阵列的详细信息。

      看到这个有点相关的问题: Swig and multidimensional arrays

      【讨论】:

      • 是的,它是一个通用的 int**,它有 2 种可能的大小。我已经知道如何通过在 c++ 定义中添加代码 sn-p 来使其工作。但我仍在寻找一种方法,仅通过编辑接口文件或 python 部分来使其工作。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2011-05-03
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      相关资源
      最近更新 更多