使用Numpy的Python C扩展

0 投票
1 回答
891 浏览
提问于 2025-04-17 04:05

我正在尝试为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) 来访问对应的数据。

撰写回答