I am not sure if the following question makes sense, since I am newbie. I am trying to create in Cython a C function which returns a numpy array, like the following.
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
However, is not letting me to compile it. But if I remove the return type of the function
cdef SumPlusOne(np.ndarray[np.int32_t, ndim=1] ArgArray):
...
There is no problem.
My question is, is there any way to declare numpy type for the return value? I don't really know if this is possible, since I don't know if np.ndarray needs to be converted to python type.
thank you
According to cython
documentation, for a cdef
function:
If no type is specified for a parameter or return value, it is assumed to be a Python object.
A numpy array
is a Python object. No conversion to a Python 'type' is needed. Its elements may be Python/C types (dtype), but the array as a whole is an object.
np.zeros((len(ArgArray), dtype = np.int32)
works in Python just as well as in Cython.
In my limited testing both of your cdefs work. Maybe it's a matter of cython
version?
This works both with and without the type declaration after the cpdef
(using this form so I can call it from 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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With