2014-01-07 32 views
6

关于cython中的内存视图,是否有任何键入与NumPy类型的视图,如np.float_t而不是简单地做double如果我使用numpy浮动数组?Cython:我应该使用np.float_t而不是双重的键入内存视图

而且我应该输入cdef然后以同样的方式做e。 G。

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 

回答

11

如果您在包含用Cython的numpy的头文件查找(例如,在主分支,它是__init__.pxd),你会发现

ctypedef double  npy_double 

ctypedef npy_double  float_t 

在换句话说,float_tdouble,因此使用np.float_t应该没有优势。

+0

我发现它..行311/758:|和我们正在使用的类型:(Why/When)是否最好使用Py_ssize_t进行索引? (在我刚刚发现的文档中##纯粹主义者可以使用“Py_ssize_t”,这是适合于数组索引的Python类型。) - >当索引NumPy/Cython-Array(s)/ - 查看任何内容时,这意味着什么。 – embert

+0

而不是评论,你应该开始一个关于使用'Py_ssize_t'的新问题。这将确保它获得最大的曝光度。 –

+1

你说得对。更容易找到其他回答者。我怀疑是否值得从中提出一个独立的问题。但是,从现在开始,我会努力做到这一点 – embert

相关问题