我正在使用cython
在numpy
中编写一个简单的函数,但似乎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
我在python
和cython
的速度几乎相同。如果我更改列选择(:
),它会变得更糟(慢5倍)。有人可以告诉我错误的位置吗?
来自cython
注释的html输出:
答案 0 :(得分:2)
循环使用i
和j
(以及_
)作为python对象,尝试cdef
- 使用它们;例如:
cdef int cols = 100
cdef int rows = 100
cdef int i = 0
cdef int j = 0
由于你没有对_
进行操作,我认为Cython正确处理它并且不需要成为cdef,但是你可以尝试(无论如何它只是一条线)。