Numpy在Cython中没有任何进步

时间:2015-05-04 17:23:45

标签: python-3.x numpy cython

我正在使用cythonnumpy中编写一个简单的函数,但似乎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倍)。有人可以告诉我错误的位置吗?

来自cython注释的html输出:

enter image description here

1 个答案:

答案 0 :(得分:2)

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

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

由于你没有对_进行操作,我认为Cython正确处理它并且不需要成为cdef,但是你可以尝试(无论如何它只是一条线)。