加速 Cython 中的 for 循环

Hyp*_*ube 4 python cython

我仍处于开始了解 Cython 工作原理的阶段。这个片段显示了我的程序中缓慢的部分之一,我想知道这个 for 循环是否可以改进。它看起来仍然很像原始的 Numpy 版本,但我添加了 cdef 和 int 转换。

cdef Py_ssize_t i, j
cdef double ii, jj

for ii in np.arange(startx, endx+1, 0.1):
    for jj in np.arange(starty, endy+1, 0.1):
        if my_condition(ii, jj):
            i = <int>ii
            j = <int>jj
            data[i, j] += 1
Run Code Online (Sandbox Code Playgroud)

你有什么建议?

hpa*_*ulj 5

研究 cython 示例

https://docs.scipy.org/doc/numpy/reference/arrays.nditer.html

它用于nditer分发数组元素。

https://cython.readthedocs.io/en/stable/src/userguide/memoryviews.html

它演示了如何使用内存视图(和 C 数组)来快速迭代这些值。

无论哪种方式,您的目标都是让 cython 直接访问数据缓冲区,而不是通过 numpy 函数。

  • 虽然此链接可以回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会变得无效。- [来自评论](/review/low-quality-posts/19261146) (2认同)