NumPy参考 >例行程序 >Indexing routines > numpy.lib.Arrayterator
numpy.lib.
Arrayterator
(var,buf_size = None )[源代码] ¶大数组的缓冲迭代器。
Arrayterator
创建一个缓冲的迭代器,以读取小的连续块中的大数组。该类对于存储在文件系统中的对象很有用。它允许对对象进行迭代,而无需读取内存中的所有内容;而是读取并迭代小块。
Arrayterator
可以与支持多维切片的任何对象一起使用。这包括NumPy数组,还包括来自Scientific.IO.NetCDF或pynetcdf的变量。
要遍历的对象。
缓冲区大小。如果提供了buf_size,则将读入内存的最大数据量为buf_size元素。默认值为“无”,它将把尽可能多的元素读入内存。
也可以看看
ndenumerate
多维数组迭代器。
flatiter
平面数组迭代器。
memmap
创建到存储在磁盘上的二进制文件中的数组的内存映射。
笔记
该算法的工作原理是首先找到一个“运行维”,沿着该维将提取块。给定维度数组
,例如,如果buf_size小于,则将使用第一个维度。另一方面,如果
将使用第二维,依此类推。沿该维度提取块,并在返回最后一个块时,过程将从下一个维度继续进行,直到已读取所有元素。(d1, d2, ..., dn)
d1
d1 < buf_size < d1*d2
例子
>>> a = np.arange(3 * 4 * 5 * 6).reshape(3, 4, 5, 6)
>>> a_itor = np.lib.Arrayterator(a, 2)
>>> a_itor.shape
(3, 4, 5, 6)
现在我们可以遍历a_itor
,它将返回大小为2的数组。由于buf_size小于任何尺寸,因此第一个尺寸将在第一个尺寸上进行迭代:
>>> for subarr in a_itor:
... if not subarr.all():
... print(subarr, subarr.shape)
>>> # [[[[0 1]]]] (1, 1, 1, 2)