python 如何使用@cython装饰器声明np.ndarray类型

bzzcjhmw  于 2023-02-18  发布在  Python
关注(0)|答案(2)|浏览(141)

我在任何地方都找不到任何专门解决这一问题的文档:
下面的代码:

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中,decorator声明numpy数组的正确方法是什么?

ecr0jaav

ecr0jaav1#

这似乎没有任何文档记录,但memoryviews被接受为字符串:

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

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

eagi6jfj

eagi6jfj2#

我在Google网上论坛中找到了以下答案:
尝试将mySum作为cpdef函数,并使用numpy数组声明语法用cython.locals修饰. pxd文件中的函数。
谷歌集团
可以使用. pxd文件和@cython.locals注解来声明缓冲区类型。
谷歌集团

相关问题