我不确定以下问题是否有意义,因为我是新手。 我试图在Cython中创建一个C函数,它返回一个numpy数组,如下所示。
cdef np.ndarray[np.int32_t, ndim=1] SumPlusOne(np.ndarray[np.int32_t, ndim=1] ArgArray):
cdef np.ndarray[int32_t, ndim=1] ReturnArray = np.zeros((len(ArgArray), dtype = np.int32)
ReturnArray = ArgArray + 1
return ReturnArray
但是,不要让我编译它。但是如果我删除函数的返回类型
cdef SumPlusOne(np.ndarray[np.int32_t, ndim=1] ArgArray):
...
没有问题。
我的问题是,有没有办法为返回值声明numpy类型?我真的不知道这是否可行,因为我不知道是否需要将np.ndarray转换为python类型。
谢谢
答案 0 :(得分:7)
根据cython
文档,cdef
函数:
如果没有为参数或返回值指定类型,则假定它是Python对象。
numpy array
是一个Python对象。不需要转换为Python“类型”。它的元素可能是Python / C类型(dtype),但整个数组是一个对象。
np.zeros((len(ArgArray), dtype = np.int32)
与Python一样在Python中运行。
在我的有限测试中,你的两个cdef工作。也许这是cython
版本的问题?
在cpdef
后使用和不使用类型声明都可以使用(使用此表单,因此我可以从Python调用它)
import numpy as np
cimport numpy as np
cimport cython
cpdef np.ndarray[np.int32_t, ndim=1] sum_plus_one(np.ndarray[np.int32_t, ndim=1] arg):
cdef np.ndarray[np.int32_t, ndim=1] result = np.zeros((len(arg)), dtype = np.int32)
result = arg + 1
return result