我正在用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:

发布于 2015-05-04 17:36:12
循环使用i和j (和_)作为python对象,尝试cdef-ing它们;例如:
cdef int cols = 100
cdef int rows = 100
cdef int i = 0
cdef int j = 0由于您没有在_上执行操作,所以我认为Cython处理它是正确的,不需要是cdef,但是您可以尝试(无论如何,它只是一行)。
https://stackoverflow.com/questions/30036117
复制相似问题