使用Numpy的Python C扩展
我正在尝试为Python创建一个C扩展,使用Numpy,但在我的C代码中读取Numpy的数据时遇到了一些问题。
如果我在Python中创建一个简单的数组,我可以在C代码中读取这些值:
Python:
from numpy import *
myarray = zeros([5, 20], dtype=uint32)
C:
value = (unsigned long*)PyArray_GETPTR2(myarray,0,0);
问题是,当我尝试从下面这个Numpy数组中读取值时,就出现了困难:
Python:
from numpy import *
myarray = zeros([5], dtype=[('f1', 'S16'), ('f2', 'S16'), ('f3', uint64), ('f4', uint32)] )
C:
value = (void*)PyArray_GETPTR1(myarray,0);
在这种情况下,值是什么数据类型呢?
1 个回答
0
Numpy的结构化数据类型默认情况下就像C语言中的紧凑结构体。不过,它们也可以更复杂一些。
要访问这些字段,可以查看例如 myarray.dtype.fields['f3']
,在你的例子中,它的值是 (dtype('uint64'), 32)
。你应该可以通过 (npy_uint64*)(((char*)value) + 32)
来访问对应的数据。