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