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

时间:2015-09-17 15:24:09

标签: python numpy netcdf

我在使用8GB RAM的机器中尝试在python中创建一个非常大的netCDF文件时遇到了问题。

我用numpy.memmap创建了一个非常大的数组,以便将此数组放在磁盘而不是ram中,因为它的大小超过了可用的ram和swap空间。 (ram和swap =每个8 gb)

我使用

在nc文件中创建了一个变量
var = ncout.createVariable('data',ARRAY.dtype,\
                       ('time','latitude','longitude',),\
                        chunksizes=(5000,61,720))

var[:]=ARRAY[:]

当代码到达这一点时,它会加载到ram中保存在磁盘中的ARRAY,然后我有内存错误。

如何保存这么大的文件?

感谢。

2 个答案:

答案 0 :(得分:1)

读写大型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')

您可以使用parallel computing with Dask加快速度。

答案 1 :(得分:0)

直接在数组上迭代可以获得第一维的切片。使用enumerate将为您提供切片和索引:

for ind, slice in enumerate(ARRAY):
    var[ind] = slice

我不清楚netCDF4-python是否会在内存中保留切片。