如何使用@cython decorator来声明np.ndarray类型

时间:2017-07-19 07:09:51

标签: python numpy cython

我无法在任何地方找到专门解决此问题的文档:

以下代码:

cdef int foo( double data ):
    # ...
    return int( data )

可以写成:

@cython.returns(cython.int)
@cython.locals(data=cython.double)
def foo(data):
     return int(data)

但我无法找到相应的声明:

cdef foo(np.ndarray[double] data):

使用@ cython.locals会导致编译错误。

装饰器在cython中声明一个numpy数组的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

这似乎没有在任何地方记录,但是内存视图被接受为字符串:

@cython.returns(cython.int)
@cython.locals(data="double[:]")
def foo(data):
     return int(data[0])

我认为这通常有效,但numpy数组的挑战是你必须cimport numpy我认为纯Python代码是不可能的。

答案 1 :(得分:0)

我在Google网上论坛中找到了以下答案:

  

尝试使mySum成为cpdef函数并装饰.pxd中的函数   使用numpy数组声明语法的cython.locals文件。

Google Group

  

您可以使用.pxd文件和@ cython.locals批注来声明   缓冲类型。

Google Group