[英]Subsetting xarray.Dataset with respect to multiple coordinates
假设我使用xarray.open_dataset(..., decode_times=False)
加载了一个xarray.Dataset
对象,打印时看起来像这样:
<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().
我无法将整个数据集加载到内存中,那么执行此操作的典型方法是什么?
NetCDF4 不支持 NumPy 支持的所有多维索引操作。 但是确实支持切片(非常快)和一维索引(有点慢)。
一些尝试:
.sel(time=slice(start, end))
)。 这应该将基于数组的索引从 netCDF4 卸载到 Dask/NumPy。.chunk()
尝试不同的 Dask 分块方案。如果这不起作用,请将完整的独立示例发布到 GitHub 上的 xarray 问题跟踪器,我们可以更详细地查看它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.