【发布时间】: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