从ctypes数组获取数据到numpy
从ctypes数组获取数据到numpy
我正在使用一个用Python(通过ctypes
)封装的C库来运行一系列的计算。在运行的不同阶段,我想将数据传递到Python中,特别是numpy
数组。
我使用的封装对于数组数据有两种不同的返回类型(这对我来说特别重要):
ctypes
数组:当我执行type(x)
(其中x是ctypes
数组)时,返回
。我知道这个数据是从文档中的内部数据复制的,并且我可以轻松地将它转换为numpy
数组:>>> np.ctypeslib.as_array(x)
这将返回一个一维的numpy
数组。
ctype
指向数据的指针:在这种情况下,根据库的文档,我理解我得到的是指向存储和直接用于库的数据的指针。当我执行type(y)
(其中y是指针)时,返回
。在这种情况下,我仍然可以通过y[0][2]
来索引数据,但是我只能通过一个非常尴尬的方式将其转换为numpy:>>> np.frombuffer(np.core.multiarray.int_asbuffer( ctypes.addressof(y.contents), array_length*np.dtype(float).itemsize))
我在一个旧的numpy
邮件列表Travis Oliphant的线程中找到了这个方法,但在numpy
文档中没有找到。如果我尝试以上的方法,我会得到以下结果:
>>> np.ctypeslib.as_array(y) ... ... 一堆堆栈信息 ... AttributeError: 'LP_c_double' object has no attribute '__array_interface__'
这种np.frombuffer
方法是最好的或唯一的方法吗?我对其他建议持开放态度,但仍然希望使用numpy
,因为我有很多其他的后处理代码依赖于numpy
功能,我想将其与这些数据一起使用。