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)