说我在打印时使用xarray.Dataset
加载了xarray.open_dataset(..., decode_times=False)
对象,如下所示:
<xarray.Dataset>
Dimensions: (bnds: 2, lat: 15, lon: 34, plev: 8, time: 3650)
Coordinates:
* time (time) float64 3.322e+04 3.322e+04 3.322e+04 3.322e+04 ...
* plev (plev) float64 1e+05 8.5e+04 7e+04 5e+04 2.5e+04 1e+04 5e+03 ...
* lat (lat) float64 40.46 43.25 46.04 48.84 51.63 54.42 57.21 60.0 ...
* lon (lon) float64 216.6 219.4 222.2 225.0 227.8 230.6 233.4 236.2 ...
Dimensions without coordinates: bnds
Data variables:
time_bnds (time, bnds) float64 3.322e+04 3.322e+04 3.322e+04 3.322e+04 ...
lat_bnds (lat, bnds) float64 39.07 41.86 41.86 44.65 44.65 47.44 47.44 ...
lon_bnds (lon, bnds) float64 215.2 218.0 218.0 220.8 220.8 223.6 223.6 ...
hus (time, plev, lat, lon) float64 0.006508 0.007438 0.008751 ...
在给定lat
,lon
和time
的多个范围的情况下,对此进行子集的最佳方法是什么?我已尝试链接一系列条件并使用xarray.Dataset.where
,但我收到错误消息:
IndexError: The indexing operation you are attempting to perform is not valid on netCDF4.Variable object. Try loading your data into memory first by calling .load().
我无法将整个数据集加载到内存中,那么典型的方法是什么?
答案 0 :(得分:1)
NetCDF4不支持NumPy支持的所有多维索引操作。但支持切片(速度非常快)和一维索引(稍慢)。
有些事情要尝试:
.sel(time=slice(start, end))
)进行索引,然后使用1维数组进行索引。这应该将基于数组的索引从netCDF4卸载到Dask / NumPy。.chunk()
。如果这不起作用,请将完整的自包含示例发布到GitHub上的xarray问题跟踪器,我们可以更详细地查看它。