2

我在尝试在具有 8gb RAM 的机器上用 python 创建一个非常大的 netCDF 文件时遇到问题。

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

我在 nc 文件中创建了一个变量

var = ncout.createVariable('data',ARRAY.dtype,\
                       ('time','latitude','longitude',),\
                        chunksizes=(5000,61,720))

var[:]=ARRAY[:]

当代码到达这一点时,它将保存在磁盘中的数组加载到内存中,然后出现内存错误。

这么大的文件怎么保存?

谢谢。

4

2 回答 2

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')

您可以通过使用Dask 的并行计算来加快速度。

于 2020-10-14T20:44:05.927 回答
0

直接在数组上进行迭代会为您提供沿第一个维度的切片。使用enumerate将为您提供切片和索引:

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

不过,我不确定 netCDF4-python 是否会将切片保留在内存中。

于 2015-09-17T19:04:29.533 回答