我有一个非常大的NetCDF
文件。
我尝试在python dask.array
模块中使用xarray
功能,并在打开此数据时指定了块大小。它工作得很好;但是,当我尝试使用.load()将变量加载到内存时,它非常慢。
我想知道是否有任何选项(在xarray
或其他python模块中)通过提供维度索引(lat,lon)来读取NetCDF
文件的子集?这样我就可以直接将函数应用于子集文件,而无需使用dask.array
。
答案 0 :(得分:0)
您可以在将变量加载到内存之前对数据进行切片。
ds = xr.open_dataset('path/to/file')
in_memory = ds.isel(x=slice(10, 1000)).load()
答案 1 :(得分:0)
此问题与https://github.com/pydata/xarray/issues/1396中讨论的问题类似,但如果您使用最新版本的dask,则应解决此问题。
您可以通过避免显式分块来提高性能,直到 索引之后,例如
tmax = xr.open_mfdataset(terra_climate_dir+'tmax.nc')
tmax_pos = tmax.sel(lat=39.9042,lon=116.4074,method='nearest').compute()
如果这没有帮助,那么问题可能与您的源数据有关。例如,如果通过网络安装的驱动器访问数据,或者如果数据加载了带有文件内分块/压缩的netCDF4文件(需要将完整的块读入内存),查询可能会很慢。