NumPy多维迭代器详解
1. 迭代器设计考量
NumPy迭代器的设计旨在使循环内使用迭代器的开销尽可能小,并使其速度尽可能快。
1.1 迭代顺序
NumPy迭代器遵循特定顺序,使用类似简单计数(带回绕)的方法,用整数元组表示数组中的当前位置。例如,对于一个 n1 × n2 × … × nN 的数组, (0, ..., 0) 表示第一个元素, (n1–1, n2–1, ..., nN–1) 表示最后一个元素。
这个整数元组相当于一个N位计数器,通过将最后一位加1来找到下一个位置。如果某一位达到 ni ,则将其置为0,并将前一位加1。例如,对于一个 3 × 2 × 4 的数组,计数顺序如下:
(0,0,0) (0,0,1) (0,0,2) (0,0,3) (0,1,0) (0,1,1) (0,1,2) (0,1,3) (1,0,0) ... (2,1,2) (2,1,3)
下一次递增将回到 (0,0,0) ,迭代器将重新开始。
1.2 获取当前值指针
假设已知指定数组当前位置的计数器,通过将计数器的整数与数组定义的步长值相乘,可得到要添加到数组第一个元素内存地址的字节数,从而获得当前值的指针。示例代码如下:
currptr = (char *)
超级会员免费看
订阅专栏 解锁全文
16

被折叠的 条评论
为什么被折叠?



