我在使用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,然后我有内存错误。
如何保存这么大的文件?
感谢。
答案 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是否会在内存中保留切片。