使用维度切片读取单个NetCDF文件的子集

时间:2018-04-24 21:29:24

标签: python python-xarray netcdf4

我有一个非常大的NetCDF文件。

我尝试在python dask.array模块中使用xarray功能,并在打开此数据时指定了块大小。它工作得很好;但是,当我尝试使用.load()将变量加载到内存时,它非常慢。

我想知道是否有任何选项(在xarray或其他python模块中)通过提供维度索引(lat,lon)来读取NetCDF文件的子集?这样我就可以直接将函数应用于子集文件,而无需使用dask.array

2 个答案:

答案 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文件(需要将完整的块读入内存),查询可能会很慢。

相关问题