python – 用cython扩展numpy
作者:互联网
我试图包装一个头文件,其中包含许多这样的函数
test.h
void test(int N, int* data_in, int* data_out);
所以我可以使用那些来自numpy.
现在我有以下cython代码:
test.pyx
import numpy as np
cimport numpy as np
ctypedef np.int_t itype_t
cdef extern from 'VolumeForm.h':
void _test 'test' (int, int*, int*)
def wrap_test(np.ndarray[itype_t, ndim=2] data):
cdef np.ndarray[dtype_t, ndim=1] out
out = np.zeros((data.shape[0],1), dtype=np.double)
_test(
data.shape[0],
<itype_t*> data.data,
<itype_t*> out.data
)
return out
但是,当我尝试编译它时,我收到错误:
Error converting Pyrex file to C:
(...)
Cannot assign type 'test.itype_t *' to 'int *'
我怎样才能解决这个问题?
解决方法:
这个问题目前正在Cython邮件列表中讨论;显然它源于一个Cython库中的一个小错误:
http://codespeak.net/mailman/listinfo/cython-dev
目前,一个潜在的解决方法是使用dtype np.long的NumPy数组,然后编写’ctypedef np.long_t itype_t’.然后你只需要使用long int而不是int来使C代码满意.
标签:python,wrapping,numpy,cython 来源: https://codeday.me/bug/20190607/1191946.html