【问题标题】:Cython: Should I use np.float_t rather than double for typed memory viewsCython:我应该使用 np.float_t 而不是 double 类型的内存视图
【发布时间】:2014-01-25 13:36:32
【问题描述】:

关于 cython 中的 memoryviews,如果我使用 numpy 浮点数组,使用诸如 np.float_t 之类的 NumPy 类型键入视图而不是简单地执行 double 是否有任何优势?

我应该输入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

【问题讨论】:

    标签: python numpy cython typing memoryview


    【解决方案1】:

    如果你查看 cython 包含的 numpy 头文件(例如,在 master 分支中,它是 __init__.pxd),你会发现

        ctypedef double       npy_double
    

    ctypedef npy_double     float_t
    

    换句话说,float_t double,所以使用np.float_t应该没有优势。

    【讨论】:

    • 我找到了.. 第 311/758 行:|并且我们正在讨论类型的使用:(为什么/何时)使用 Py_ssize_t 进行索引是否更可取? (在我刚刚发现的文档中'# Purists can use "Py_ssize_t" 这是数组索引的正确 Python 类型。')-> 这是否意味着在索引 NumPy/Cython-Array(s)/-views 时总是如此......?
    • 您应该提出一个关于使用Py_ssize_t 的新问题,而不是评论。这将确保它获得最大的曝光率。
    • 你是对的。也更容易为其他寻求答案的人找到。大多数情况下,我怀疑是否值得提出一个独立的问题。但是,从现在开始我会努力做到这一点
    • 我把 Py_ssize_t 变成了 new question
    • 好的。我只是在这里评论说答案是“是”——但很难找到一个明确的说法。
    猜你喜欢
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2016-07-15
    • 2013-03-15
    • 2011-06-19
    相关资源
    最近更新 更多