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

Python 为什么有两个语法将np数组传递给cython函数?,python,numpy,cython,Python,Numpy,Cython,更具体地说,以下两者之间的区别是什么: def f(double[::1, :]): pass 及 第一种是较新的“类型化记忆视图”样式: 第二种是较旧的缓冲区语法: 请参阅类型化MemoryView上的文档以进行比较,因为它很好地涵盖了这些差异 我在文档中没有提到的一件事是,从历史上看,有时我发现,当将数组传递给不需要太多时间计算的函数时,缓冲区语法可能会快一点,因为获取memoryview的开销稍大一点,尽管它在访问数据时更有效。我不确定这种情况是否仍然存在,但它可能值得为您的

更具体地说,以下两者之间的区别是什么:

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

第一种是较新的“类型化记忆视图”样式:

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

请参阅类型化MemoryView上的文档以进行比较,因为它很好地涵盖了这些差异

我在文档中没有提到的一件事是,从历史上看,有时我发现,当将数组传递给不需要太多时间计算的函数时,缓冲区语法可能会快一点,因为获取memoryview的开销稍大一点,尽管它在访问数据时更有效。我不确定这种情况是否仍然存在,但它可能值得为您的特定用例进行基准测试

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