首页 > 解决方案 > 如何处理xarray中的时间相关坐标?

问题描述

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

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

标签: pythonpython-xarray

解决方案


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

考虑以下玩具示例。这里ji是“逻辑”维度,不对应于任何物理位置(只是数组索引),而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

该图如下所示:

绘图的输出

您可以将这种方法适应您描述的场景


推荐阅读