numpy.lib.Arrayterator#

class numpy.lib.Arrayterator(var, buf_size=None)[source]#

大型数组的缓冲迭代器。

Arrayterator 创建一个缓冲迭代器,用于以小的连续块读取大型数组。此类对于存储在文件系统中的对象很有用。它允许迭代对象 *无需* 将所有内容都读入内存;而是读取并迭代小的块。

Arrayterator 可用于任何支持多维切片的对象。这包括 NumPy 数组,但也包括例如 Scientific.IO.NetCDF 或 pynetcdf 中的变量。

参数:
vararray_like

要迭代的对象。

buf_sizeint,可选

缓冲区大小。如果提供了 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,它将返回大小为 2 的数组。由于 buf_size 小于任何维度,因此将首先迭代第一个维度

>>> for subarr in a_itor:
...     if not subarr.all():
...         print(subarr, subarr.shape) 
>>> # [[[[0 1]]]] (1, 1, 1, 2)
属性:
var
buf_size
start
stop
step
shape

要迭代的数组的形状。

flat

Arrayterator 对象的一维扁平迭代器。