python - 使用 Cython 循环 Numpy 数组

标签 python arrays numpy cython

ab是两个长度为1024的numpy.float数组,定义为

cdef numpy.ndarray a
cdef numpy.ndarray b

我注意到:

cdef int i
for i in range(1024):
    b[i] += a[i]

比以下慢得多:

b += a 

为什么?

我真的需要能够手动循环数组。

最佳答案

如果您告诉 Cython ab 的数据类型和维数,差异会更小:

cdef numpy.ndarray[np.float64_t, ndim=1] a, b

尽管差异会更小,但您不会击败 b += a,因为这是使用 NumPy 的 SIMD 增强函数(其执行情况取决于您的 CPU 是否支持 SIMD)。

关于python - 使用 Cython 循环 Numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30241209/

相关文章:

C 数组值因 printf 语句而改变?

c - 编译器如何在编译时不知道大小的情况下分配内存?

python - Pandas 用特定列的列表替换 NaN 值

当仅更新一个索引时,Python numpy Zeros 数组为每个值分配 1

python - Python 中的 HTML 标签云

python - 5 次请求后 urllib2 HTTPPasswordMgrWithDefaultRealm 'loses' 密码

python - 密码重置功能 Django-Registration-Redux 应用程序

jquery - 简单的数字选择游戏(jQuery)

python - 有没有办法同时使用 fabric run() 和 sudo() ?

python - 在 PIL 中,为什么不转换 ('L' ) 转换图像灰度?