【问题标题】:Updating xarray dimension values with numpy datetime array not working with netCDF file使用 numpy datetime 数组更新 xarray 维度值不适用于 netCDF 文件
【发布时间】:2022-02-22 02:05:59
【问题描述】:

一个例子 ds:

x = xr.Dataset(
    {
        "temperature_c": (
            ("lat", "lon", "date"),
            20 * np.random.rand(8).reshape(2, 2, 2),
        ),
    },
    coords={"lat": [10, 20], "lon": [150, 160], "date": [1, 2]},
)


>>> x
>>> <xarray.Dataset>
Dimensions:        (lat: 2, lon: 2, date: 2)
Coordinates:
  * lat            (lat) int32 10 20
  * lon            (lon) int32 150 160
  * date           (date) int32 1 2
Data variables:
    temperature_c  (lat, lon) float64 10.98 14.3 12.06 10.9

还有一个 numpy 日期时间数组:

import numpy as np
times = np.array(['2007-07-13', '2006-01-13'], dtype='datetime64')

使用x.update({"date" : times}) 可以正常工作,并得到我想要的结果。

>>> <xarray.Dataset>
Dimensions:        (lat: 2, lon: 2, date: 2)
Coordinates:
  * lat            (lat) int32 10 20
  * lon            (lon) int32 150 160
  * date           (date) datetime64[ns] 2007-07-13, 2006-01-13

Data variables:
    temperature_c  (lat, lon) float64 10.98 14.3 12.06 10.9

就我而言,我已将 netcdf 文件作为 xarray 读取,除了更大之外,其尺寸相似。我的数据集如下所示:

>>> ds
>>> <xarray.Dataset>
Dimensions:  longitude: 720 latitude: 361 time: 504
Coordinates:
longitude  (longitude)  float32        -179.5 -179.0 ... 179.5 180.0
latitude   (latitude)   float32        -90.0 -89.5 -89.0 ... 89.5 90.0
time       (time)       float64           0 1 2 3 4 5 ... 499 500 501 502 503

当我尝试做同样的事情时,使用 ds.update({"time": times}) 更新时间坐标会导致以下 xarray.Dataset:

>>> ds
>>> <xarray.Dataset>
Dimensions:  dim_0: 504 longitude: 720 latitude: 361 time: 504
Coordinates:
time       (dim_0)      datetime64[ns]  1979-01-15 ... 2020-12-15
longitude  (longitude)  float32        -179.5 -179.0 ... 179.5 180.0
latitude   (latitude)   float32        -90.0 -89.5 -89.0 ... 89.5 90.0
dim_0      (dim_0)      int64           0 1 2 3 4 5 ... 499 500 501 502 503

这里有什么区别?为什么在使用加载的 netCDF 数据集时无法更新维度?我觉得它必须这样做,突然添加了一个 dim_0 维度,但这之前没有发生过。

它不能像这样使用,因为 xarray.Dataset 仍然使用dim_0 作为维度值。当我尝试删除维度并将时间分配为新的主要维度时,这不起作用并删除了所有数据变量。交换维度名称也不起作用,因为它无法将 dim_0 识别为有效的维度名称。

可以在here 找到源数据集。它是 500mb。

【问题讨论】:

    标签: python numpy datetime python-xarray


    【解决方案1】:

    这很简单,不需要 xarray 数据集中的任何方法,因为这些都不起作用:

    ds["time"] = ("time", times)
    

    成功了

    【讨论】:

      猜你喜欢
      • 2021-01-22
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 2020-06-19
      • 2018-03-10
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      相关资源
      最近更新 更多