【问题标题】:How to prevent xarray from converting time offsets to absolute datetimes如何防止 xarray 将时间偏移量转换为绝对日期时间
【发布时间】:2018-03-23 23:27:48
【问题描述】:

我有一个相当标准的天气数据集,它有 5 个维度:参考时间、预报时间、z、y 和 x。预测时间是相对于参考时间的偏移量。数据集作为每个参考时间的一个文件保存到磁盘。我想打开整个多文件数据集并让预测维度按偏移量对齐,但 xarray 会自动转换并按绝对时间对齐预测维度。

选择时间偏移而不是绝对日期时间有几个原因。使用绝对时间极大地增加了数据集的逻辑形状,因为只有某些预测对每个参考时间有效。这种增加的形状导致数据集主要是nan,任何用户都必须通过外部手段了解该有效性。通过偏移对齐预测使数据集更具自我描述性。

一个具体的例子

我正在处理NAM-NMM 预测。预测每 6 小时以一系列 GRIB 文件的形式发布,每个预测小时一个。我首先使用 PyNIO 引擎将每个 GRIB 文件作为数据集打开,然后选择我想要保留的变量和地理区域。然后我将参考时间添加为日期时间坐标,将预测时间添加为整数坐标,并将units 属性设置为'hours since {reftime}'。 (在 Panoply 中正确可视化需要设置单位。)然后我将所有数据集连接到预测维度的相同参考时间,并将结果作为 netCDF 保存到磁盘。

Here is a gist 发生了什么以及ncdump 的输出。

这很好用。我可以使用小时偏移量沿预测维度进行选择。我可以在 Panoply 中可视化数据集。 ncdump 中的预测维度看起来是正确的。

但是当我重新打开 netCDF 时,xarray 会自动将预测维度转换为绝对日期时间。当我打开多个文件时,预测维度是按绝对时间而不是参考时间对齐的。

如何防止 xarray 将预测维度解释为绝对日期时间?

【问题讨论】:

  • 请分享您的 netcdf 文件的描述,例如 ncdump -h 的输出。显示您如何使用 xarray 的代码的 sn-p 也会有所帮助。
  • 这是NAM-NMM 的预测。数据作为 GRIB 发布,每个预测小时一个,我使用 PyNIO 后端打开。然后我重命名一些变量,获取一个地理子集,设置参考时间和预测坐标,连接相同参考时间的所有预测,并保存到 netCDF。 Here a recent ncdump,但我在这里使用整数进行预测。

标签: python-xarray


【解决方案1】:

xarray.open_datasetxarray.open_mfdataset 中设置decode_times=False 将禁用解析时间。这应该让您在调用 xr.decode_cf() 之前以任何必要的方式自定义事物,例如,

raw = xr.open_mfdataset(my_files, decode_cf=False)
raw.forecast.attrs['units'] = 'hours'
ds = xr.decode_cf(raw)

特别是,如果您将“units”属性设置为像“hours”这样的时间单位,xarray 会将您的“forecast”变量解码为np.timedelta64。这将允许您沿相同的轴组合多个文件。

我怀疑 Panoply 也可能能够处理这样的单位,因为时间间隔单位适用于这个变量,我相信它对应于 CF Standard names 的“forecast_period”。

【讨论】:

    猜你喜欢
    • 2018-02-20
    • 1970-01-01
    • 2016-10-23
    • 2020-01-08
    • 2021-05-22
    • 2023-04-02
    • 2019-10-10
    • 2020-10-24
    • 1970-01-01
    相关资源
    最近更新 更多