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