如何处理 xarray 中的时间相关坐标?

How to deal with time-dependent coordinates in xarray?

我想使用 xarray 来处理具有时间相关坐标的数据集。更准确地说,我处理以风暴为中心的预报,这会导致维度(时间、纬度、经度)但是纬度、经度是风暴移动时时间的函数。

似乎 xarray 中没有本地方法来处理这种情况,但是有哪些可能的解决方法? 独立存储每个时间步很麻烦,但是,使用 xr.concat 会导致所有时间都只有一个经纬度坐标... 我想知道应用 time1.interp_like(time2) 是否有帮助。本质上,随着时间的推移,用 nan 填充所有时间步长到 lat,lon 的最大延伸...... 有什么想法吗?

如果你的目标是绘图,那么你可以使用non-dimension coordinates来解决这个问题。

考虑以下玩具示例。这里 ji 是 "logical" 维度,不对应任何物理位置(只是数组索引),而 lonlat 是时间-相关地理坐标。

import xarray as xr
import numpy as np

# create a dummy dataset
ds = xr.Dataset({'foo': (('time', 'j', 'i'), np.random.rand(10, 30, 30))})

# add non-dimension coordinates that depend on time
ds.coords['lon'] = 190 + 0.25 * ds.i + 0.01 * ds.time
ds.coords['lat'] = 24 + 0.25 * ds.j + 0.02 * ds.time
print(ds)

# select a specific time and plot
ds.foo.sel(time=5).plot(x='lon', y='lat')

数据集 repr 是

<xarray.Dataset>
Dimensions:  (i: 30, j: 30, time: 10)
Coordinates:
    lon      (i, time) float64 190.0 190.0 190.0 190.0 ... 197.3 197.3 197.3
    lat      (j, time) float64 24.0 24.02 24.04 24.06 ... 31.39 31.41 31.43
Dimensions without coordinates: i, j, time
Data variables:
    foo      (time, j, i) float64 0.7443 0.2943 0.4479 ... 0.5386 0.3574 0.5597

图形看起来像这样:

您可以根据您描述的场景采用这种方法