在 python swig 中读取 c++ 2d 数组
Posted
技术标签:
【中文标题】在 python swig 中读取 c++ 2d 数组【英文标题】:Reading c++ 2d array in python swig 【发布时间】: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】:如果您使用一维数组来访问元素,您会发现在语言之间来回传递东西会容易得多,例如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 部分来使其工作。谢谢!以上是关于在 python swig 中读取 c++ 2d 数组的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 SWIG 在 Python 中实例化 C++ 类(获取属性错误)
在 SWIG 中携带自定义 Python 数据的 C++ 对象