gpt4 book ai didi

numpy - 在cython定义的c函数中返回numpy数组

转载 作者:行者123 更新时间:2023-12-04 11:51:00 27 4
gpt4 key购买 nike

我不确定以下问题是否有意义,因为我是新手。
我试图在 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 类型。

谢谢你

最佳答案

根据 cython文档,用于 cdef功能:

If no type is specified for a parameter or return value, it is assumed to be a Python object.



一个 numpy array是一个 Python 对象。不需要转换为 Python“类型”。它的元素可能是 Python/C 类型(dtype),但整个数组是一个对象。
np.zeros((len(ArgArray), dtype = np.int32)

在 Python 中和在 Cython 中一样有效。

在我有限的测试中,您的两个 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

关于numpy - 在cython定义的c函数中返回numpy数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28474931/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com