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,它將返回大小為二的陣列。由於 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 物件的 1 維扁平迭代器。