为什么有两种语法将np数组传递给cython函数?

时间:2017-02-14 14:49:03

标签: python numpy cython

更具体地说,有什么区别:

def f(double[::1, :]):
    pass

def f(np.ndarray[double, ndim=2, order='fortran']):
    pass

1 个答案:

答案 0 :(得分:2)

第一个是较新的"类型的记忆视图"式:

http://cython.readthedocs.io/en/latest/src/userguide/memoryviews.html

第二种是较旧的缓冲区语法:

http://cython.readthedocs.io/en/latest/src/tutorial/numpy.html#efficient-indexing

请参阅有关类型化内存视图的文档以进行比较,因为它很好地涵盖了差异。

我在文档中提到的一件事是,有时我发现历史上,当将数组传递给不需要花费太多时间来计算的函数时,缓冲区语法可能会快一些。获取内存视图有一点点开销,尽管访问数据时效率更高。我不确定是否仍然如此,但它可能值得为您的特定用例进行基准测试。