我正在尝试处理来自非常大的 netCDF 文件(每个约 400 Gb)的数据。每个文件都有一些变量,它们都比系统内存大得多(例如 180 Gb 与 32 Gb RAM)。我正在尝试使用 numpy 和 netCDF4-python 通过一次复制一个切片并对该切片进行操作来对这些变量进行一些操作。不幸的是,读取每个切片需要很长时间,这会影响性能。
例如,其中一个变量是一个 shape 数组(500, 500, 450, 300)
。我想对 slice 进行操作[:,:,0]
,所以我执行以下操作:
import netCDF4 as nc
f = nc.Dataset('myfile.ncdf','r+')
myvar = f.variables['myvar']
myslice = myvar[:,:,0]
但是最后一步需要很长时间(在我的系统上大约 5 分钟)。例如,如果我(500, 500, 300)
在 netcdf 文件中保存了一个形状变量,那么相同大小的读取操作只需几秒钟。
有什么办法可以加快速度吗?一个明显的路径是转置数组,以便我选择的索引首先出现。但在如此大的文件中,这在内存中是不可能的,而且考虑到一个简单的操作已经花费了很长时间,尝试它似乎更慢。我想要的是一种以 Fortran 接口 get_vara 函数的方式读取 netcdf 文件片段的快速方法。或某种有效转置数组的方法。