Cython 中的 Numpy,没有改进
Numpy in Cython, no improvement
我正在使用 numpy
在 cython
中编写一个简单的函数,但似乎 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 倍)。谁能告诉我错误可能出在哪里?
html 来自 cython
注释的输出:
循环使用i
和j
(和_
)作为python对象,尝试cdef
-ing它们;例如这里:
cdef int cols = 100
cdef int rows = 100
cdef int i = 0
cdef int j = 0
因为你不对_
进行操作,我认为Cython处理得很好,不需要cdef,但你可以试试(反正它只是一行)。
我正在使用 numpy
在 cython
中编写一个简单的函数,但似乎 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 倍)。谁能告诉我错误可能出在哪里?
html 来自 cython
注释的输出:
循环使用i
和j
(和_
)作为python对象,尝试cdef
-ing它们;例如这里:
cdef int cols = 100
cdef int rows = 100
cdef int i = 0
cdef int j = 0
因为你不对_
进行操作,我认为Cython处理得很好,不需要cdef,但你可以试试(反正它只是一行)。