numpy.lib.Arrayterator#
- класс numpy.lib.Arrayterator(var, buf_size=None)[источник]#
Буферизованный итератор для больших массивов.
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, и он будет возвращать массивы размера два. Поскольку buf_size был меньше любого измерения, первое измерение будет перебираться первым:>>> for subarr in a_itor: ... if not subarr.all(): ... print(subarr, subarr.shape) >>> # [[[[0 1]]]] (1, 1, 1, 2)