numpy.lib.Arrayterator#
- class numpy.lib.Arrayterator(var, buf_size=None)[source]#
大型数组的缓冲迭代器。
Arrayterator
创建一个缓冲迭代器,用于以小的连续块读取大型数组。该类对于存储在文件系统中的对象非常有用。它允许在不将所有内容读入内存的情况下迭代对象;相反,它会读取并迭代小块数据。Arrayterator
可以用于任何支持多维切片的对象。这包括 NumPy 数组,也包括例如 Scientific.IO.NetCDF 或 pynetcdf 中的变量。- 参数:
- vararray_like
要迭代的对象。
- buf_sizeint, optional
缓冲区大小。如果提供了 buf_size,则读入内存的最大数据量为 buf_size 个元素。默认为 None,此时会尽可能多地将元素读入内存。
另请参阅
numpy.ndenumerate
多维数组迭代器。
numpy.flatiter
扁平数组迭代器。
numpy.memmap
创建到磁盘上二进制文件中存储的数组的内存映射。
注意
该算法首先找到一个“运行维度”,沿着该维度提取块。给定一个维度为
(d1, d2, ..., dn)
的数组,例如,如果 buf_size 小于d1
,则将使用第一个维度。另一方面,如果d1 < buf_size < d1*d2
,则将使用第二个维度,依此类推。沿着此维度提取块,当最后一个块返回时,进程将从下一个维度继续,直到所有元素都被读取。示例
>>> import numpy as np >>> 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
,它将返回大小为二的数组。由于 buf_size 小于任何维度,因此将首先迭代第一个维度。>>> for subarr in a_itor: ... if not subarr.all(): ... print(subarr, subarr.shape) >>> # [[[[0 1]]]] (1, 1, 1, 2)