Python ctypes指向具有自定义数据类型的numpy数组的指针

Python ctypes指向具有自定义数据类型的numpy数组的指针,python,numpy,ctypes,Python,Numpy,Ctypes,我有一个带有自定义数据类型的numpy数组: a = np.zeros(100, dtype=np.dtype([('one',np.double),('two',np.int)])) a['one']=np.arange(100) a['two']=np.arange(100)*-1 我想创建一个可以传递到C库的ctypes指针。 问题是C库只需要一个指向双数组的指针,即“一”字段 我试过: a['one'].ctypes.data_as(ctypes.POINTER(ctypes.c_do

我有一个带有自定义数据类型的numpy数组:

a = np.zeros(100, dtype=np.dtype([('one',np.double),('two',np.int)]))
a['one']=np.arange(100)
a['two']=np.arange(100)*-1
我想创建一个可以传递到C库的ctypes指针。 问题是C库只需要一个指向双数组的指针,即“一”字段

我试过: a['one'].ctypes.data_as(ctypes.POINTER(ctypes.c_double))

但是它不起作用,我相信,因为C例程不知道通过数组的正确步幅


如果不复制数组,您有什么建议吗?

您必须将数据复制到连续数组中

one = np.ascontiguousarray(a['one'])
one.ctypes.data_as(ctypes.POINTER(ctypes.c_double))

您必须将数据复制到一个连续的数组中

one = np.ascontiguousarray(a['one'])
one.ctypes.data_as(ctypes.POINTER(ctypes.c_double))

这是因为没有办法告诉C函数正确的步幅是什么,也没有办法将步幅更改为预期的步幅(即连续的双精度),除非创建按预期格式格式化的数据。我很担心……谢谢,原则上,如果C函数希望使用double+int结构,它会工作吗?这是因为没有办法告诉C函数正确的步幅是什么,也没有办法将步幅更改为它期望的步幅(即连续的双精度),除非创建按其预期格式格式化的数据。我很担心……谢谢,原则上,如果C函数期望使用double+int结构,它会工作吗?