[英]Creating a big netcdf file (>10Gb) with netCDF4 in python
我在嘗試在具有 8GB RAM 的機器上用 python 創建一個非常大的 netCDF 文件時遇到問題。
我用 numpy.memmap 創建了一個非常大的數組,以便將這個數組放在磁盤而不是 ram 中,因為它的大小超過了可用的 ram 和交換空間。 (內存和交換 = 8 GB)
我在 nc 文件中創建了一個變量
var = ncout.createVariable('data',ARRAY.dtype,\
('time','latitude','longitude',),\
chunksizes=(5000,61,720))
var[:]=ARRAY[:]
當代碼到達這一點時,它會將保存在磁盤中的 ARRAY 加載到 ram 中,然后出現內存錯誤。
這么大的文件怎么保存?
謝謝。
讀取和寫入大型 NetCDF4 文件的最佳方法是使用Xarray ,它使用引擎蓋下的 Dask 自動以塊的形式讀取和寫入數據。
import xarray as xr
ds = xr.open_dataset('my_big_input_file.nc',
chunks={'time':5000, ,'latitude':61, ,'longitude':720})
ds.to_netcdf('my_big_output_file.nc',mode='w')
您可以通過將並行計算與 Dask 結合使用來加快速度。
直接在數組上迭代為您提供沿第一維的切片。 使用enumerate
將為您提供切片和索引:
for ind, slice in enumerate(ARRAY):
var[ind] = slice
不過,我不確定 netCDF4-python 是否會將切片保留在內存中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.