ctypedef与ndarray引发"缓冲区类型仅允许作为函数局部变量"

时间:2018-01-17 05:53:39

标签: python numpy cython

我想在特定的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仍有这样的错误。

1 个答案:

答案 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