关于cython中的内存视图,如果我使用numpy浮点数组,使用NumPy类型(例如np.float_t
)键入视图而不是简单地执行double
有什么好处?
我是否应该以同样的方式键入cdef
,例如。
ctypedef np.float64_t np_float_t
...
@cython.profile(False)
@cython.wraparound(False)
@cython.boundscheck(False)
cdef np_float_t mean_1d(np_float_t [:] v) nogil:
cdef unsigned int n = v.shape[0]
cdef np_float_t n_sum = 0.
cdef Py_ssize_t i
for i in range(n):
n_sum += v[i]
return n_sum / n
如果您查看 cython 中包含的 numpy 头文件(例如,在 master 分支中,它是 __init__.pxd
),您会发现
ctypedef double npy_double
和
ctypedef npy_double float_t
换句话说,float_t
是double
,所以使用np.float_t
应该没有优势。