【问题标题】:How to deal with time-dependent coordinates in xarray?如何处理xarray中的时间相关坐标?
【发布时间】:2019-12-03 18:59:45
【问题描述】:

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

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

【问题讨论】:

  • 这些关于 xarray 的问题经常出现。这一切都归结为您所说的“处理”。您能否更具体地说明您想对(时间相关的)纬度坐标做什么?阴谋?计算什么?
  • 绘图是个问题......在我的情况下,对于计算来说,这并不重要,但是,我仍然会对解决方案感兴趣

标签: python python-xarray


【解决方案1】:

如果您的目标是绘图,那么您可以使用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

而图是这样的:

您可以根据您描述的场景调整这种方法

【讨论】:

  • 感谢您的建议。注意: ds.time 前面的因素不一定是常数,但可能取决于时间本身,这使它有点麻烦,但到目前为止它是最好的工作解决方案。再次感谢!
  • 如果对时间的依赖是非线性的,那真的没有什么不同。您可以用任何 numpy 公式替换 ds.coords['lon'] = 的表达式。我不明白这有多麻烦。如果您认为这可以解决您的问题,您介意“接受”我的回答吗?
猜你喜欢
  • 2020-07-06
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 2017-03-03
  • 2017-09-25
  • 2021-10-21
  • 2021-12-12
  • 2020-07-15
相关资源
最近更新 更多