在python swig中读取c ++ 2d数组

时间:2017-06-07 23:26:19

标签: python c++ arrays numpy swig

C ++部分 我有一个类a,带有 public 变量2d int array b,我想在python中打印出来。(我想要访问它的方式是{{1} })

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

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

现在当我尝试在python中使用它时,b是a.b

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

  1. 我试图访问变量,而不是函数。
  2. 所以请不要将我的链接转介给我的问题,谢谢。

2 个答案:

答案 0 :(得分:0)

如果您可以添加C ++定义的代码片段(如果使用int **则为C),您的问题将更容易回答。当你说" 2d int array"时,你的意思是一般的int **吗?数组大小是否已预先知道?

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

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

答案 1 :(得分:0)

您会发现,如果您使用一维数组来访问元素,则可以更轻松地在语言之间来回传递,例如: arr[y*WIDTH+x]

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

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