Cython 中的 Numpy,没有改进

Numpy in Cython, no improvement

我正在使用 numpycython 中编写一个简单的函数,但似乎 cython 在转换为 C++ 时产生了大量的 API .谁能帮我解决这个错误?我在 cython 文档中没有找到更多内容。

operations.pyx:

import numpy as np
cimport numpy as np
import cython
cimport cython

@cython.boundscheck(False)
@cython.wraparound(False)
@cython.nonecheck(False)
def diff(np.ndarray[np.float64_t, ndim=2] a,
         np.ndarray[np.float64_t, ndim=2] b):
    cdef int cols = 100
    cdef int rows = 100
    for _ in range(1000):
        for i in range(rows):
            b[i, 0] = (a[i, 1] - a[i, cols - 1]) / 2
        for i in range(1, cols - 1):
            b[:, i] = (a[:, i + 1] - a[:, i - 1]) / 2
        for i in range(rows):
            b[i, cols - 1] = (a[i, 0] - a[i, cols - 2]) / 2
    return

我在 pythoncython 中的速度几乎相同。如果我更改列选择 (:),它会变得更糟(慢 5 倍)。谁能告诉我错误可能出在哪里?

html 来自 cython 注释的输出:

循环使用ij(和_)作为python对象,尝试cdef-ing它们;例如这里:

cdef int cols = 100
cdef int rows = 100
cdef int i = 0
cdef int j = 0

因为你不对_进行操作,我认为Cython处理得很好,不需要cdef,但你可以试试(反正它只是一行)。