簡體   English   中英

在python中使用netCDF4創建一個大的netcdf文件(> 10Gb)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM