如何使用ctypes接口从包含numpy数组的C返回一个对象?

时间:2016-10-07 19:24:19

标签: python c ctypes

如果这是非常基本的道歉,我对ctypes / python很新。

我的目标是调用一个C库来生成一个包含(动态分配)数组的对象,然后将该对象返回到python并将其保存在python数据结构中(对于此处的示例,一个对象)其中包括一小撮的整数)。这是我到目前为止所做的:

C-library相关代码:

struct footype{
   int p1;
   int *myarr;
}
footype myfun(int nx, ny, nz){
  static footype myfoo; 
  myfoo.myarr = new int[nx*ny*nz];
  myfoo.p1 = nx+ny;
  return myfoo;
}

相关的python代码:

import numpy as np
from ctypes import *
class Foopy(Structure):
  _fields_ = [("p1",c_int),("mat",POINTER(c_int))]
lib = cdll.LoadLibrary("./libmyfun.so")
lib.myfun.restype = Foo
myfoo = lib.myfun(10,10,10)
myobj.arr = np.ctypeslib.as_array(myfoo.mat,(10,10,10))
myobj.p1 = myfoo.p1

这名义上有效,因为myobj具有预期的内容。但是我想知道这是否有问题,因为来自numpy.ctypeslib.as_array doc:“numpy数组与ctypes对象共享内存。” - 在我的情况下,它包含一个指针,我不清楚该内存拥有/管理的位置。

我想我的问题是 - 是否有更好/更通用的方法来做到这一点?作为推论,如果没有ctypeslib.as_array的魔力,如果返回的对象包含动态分配的一些其他对象的数组,那么它将如何工作?目标是将其捕获到python列表?

0 个答案:

没有答案