我仍处于开始了解 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)
你有什么建议?
研究 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 函数。
| 归档时间: |
|
| 查看次数: |
10122 次 |
| 最近记录: |