沿新维度组合 xarray 数据集变量而不扩展每个变量

Combine xarray Dataset variables along a new dimension without expanding each one

我有一个维度为纬度和经度的 xarray。它包括 17 个变量,每个变量对应不同的时间步长。我想扩展维度以包括时间并将变量的数量减少到只有一个,有 17 个时间步长。我试过用下面的代码实现它,但我最终得到了 n 个变量,每个变量都包括所有时间步长和纬度、长维度。

原始数据集,ds:

all_dates = ['2019-03-29','2019-05-10','2019-06-21','2019-07-19','2019-08-30','2019-10-11','2019-11-22','2020-01-03','2020-02-14','2020-03-27','2020-05-08','2020-06-19','2020-07-17','2020-08-28','2020-10-09','2021-10-08','2021-11-19']

date_list = pd.to_datetime(all_dates)
ds2 = ds.expand_dims(time=date_list)

新数据集包含一个包含每个数据变量的 17 个时间步长的数组,而不是一个具有 17 个时间步长的数据变量:

有没有办法增加一个时间维度,将数据集的n个变量减少到包含时间维度中n个时间步长对应的单个变量?

您正在寻找 xr.Dataset.to_array. expand_dims 完全符合它在您的 post 中所做的工作 - 它复制 您数据中的每个数组 以便它们各自包含全时维度。但是您实际上是想将所有数组连接成一个沿着新维度。

# concatenate the arrays, assign the name "all_images", return to a Dataset,
# and assign the time dimension
ds.to_array("time", name="all_images").to_dataset().assign_coords(
    time=date_list
)

您也可以使用 xr.concat 来完成此操作,方法是拉出每个数组并将它们连接起来。使用 concat 可能是确保正确排序的更谨慎的方法,因为您要重新标记数组。

# concatenate each image with an explicit order while assigning
# them the coordinate from date_list
xr.concat(
    [ds[f"image{i}" for i in range(1, len(date_list) + 1)],
    dim=pd.Index(date_list, name="time"),
).to_dataset(name="all_images")