使用 Cython 遍历 Numpy 数组
Loop over a Numpy array with Cython
设a
和b
为两个numpy.float
长度为1024的数组,定义为
cdef numpy.ndarray a
cdef numpy.ndarray b
我注意到:
cdef int i
for i in range(1024):
b[i] += a[i]
比
慢得多
b += a
为什么?
我真的需要能够手动遍历数组。
a
和b
如果告诉Cython数据类型和维数,差异会更小:
cdef numpy.ndarray[np.float64_t, ndim=1] a, b
尽管差异会更小,但您不会击败 b += a
,因为这是使用 NumPy 的 SIMD 增强功能(这将取决于您的 CPU 是否支持 SIMD)。
设a
和b
为两个numpy.float
长度为1024的数组,定义为
cdef numpy.ndarray a
cdef numpy.ndarray b
我注意到:
cdef int i
for i in range(1024):
b[i] += a[i]
比
慢得多b += a
为什么?
我真的需要能够手动遍历数组。
a
和b
如果告诉Cython数据类型和维数,差异会更小:
cdef numpy.ndarray[np.float64_t, ndim=1] a, b
尽管差异会更小,但您不会击败 b += a
,因为这是使用 NumPy 的 SIMD 增强功能(这将取决于您的 CPU 是否支持 SIMD)。