gpt4 book ai didi

python - 相对于多个坐标对 xarray.Dataset 进行子集化

转载 作者:行者123 更新时间:2023-12-05 04:11:35 25 4
gpt4 key购买 nike

假设我使用 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 ...

在给定 latlontime 的多个范围内,最好的子集化方法是什么?我尝试链接一系列条件并使用 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 问题跟踪器,我们可以更详细地研究它。

关于python - 相对于多个坐标对 xarray.Dataset 进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42538021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com