我想在特定的numpy结构上定义一个类型。
cimport numpy as np
ctypedef np.ndarray[np.int32_t, ndim=1] XX_t
但是cython编译失败并出现错误:
cimport numpy as np
ctypedef np.ndarray[np.int32_t, ndim=1] XX_t
^
------------------------------------------------------------
x.pyx:2:0: Buffer types only allowed as function local variables
我一直在搜索,cdef
上有解释。
我不明白为什么ctypedef
仍有这样的错误。
答案 0 :(得分:1)
正如错误消息所示,numpy缓冲区类型(np.ndarray...
)只能用于局部变量/函数参数,而不能用于typedef。可能没有根本原因这是行不通的,根本没有实施。 Github问题在这里:
https://github.com/cython/cython/issues/754
正如@Pierre在评论中所指出的那样,cython现在支持类型存储器(int[:]
)的替代语法,它似乎与typedef一起使用。
%%cython
ctypedef int[:] XX_t
def my_fun(XX_t arr):
return arr[0]
my_fun(np.array([1,2,3], dtype=int))
Out[6]: 1