【问题标题】:xarray, indexing with multidimensional coordinatesxarray,用多维坐标索引
【发布时间】:2021-01-14 06:16:48
【问题描述】:

我不确定是否可行,但我想向 xarray 添加一个新坐标,该坐标与其索引的数据大小相同,但维度数不同。

例如,取一个二维数组,一维是日期,一维是时间:

data = np.random.rand(5, 24)
date_idx = pd.date_range("20200921", "20200925")
time_of_day_idx = np.arange(0, np.timedelta64(1, "D"), np.timedelta64(1, "h"))

da = xr.DataArray(data,
                  dims=("date", "time_of_day"),
                  coords={"date" : date_idx,
                          "time_of_day": time_of_day_idx})

我可以为数组中的每个值添加一个带有时间的新二维坐标。

time_idx = np.add.outer(date_idx, time_of_day_idx)
da.assign_coords(time=(("date", "time_of_day"), time_idx))

但我真正想做的是将维度堆叠在一起,为同一数组中的时间序列创建一个新的一维坐标,如下所示:

da.assign_coords(time=(("date", "time_of_day"), time_idx.flatten()))

但是,这样做会引发:

ValueError: dimensions ('date', 'time_of_day') must have the same length as the number of data dimensions, ndim=1

我知道我可以将 2D xarray 重塑或展平为 1D 并为时间序列创建新索引,但是能够拥有可以索引到 2D xarray 的 1D 坐标会非常方便。我玩过stacking和MultiIndex,但我发现了同样的问题,每个索引都有单独的值访问每个维度,而不是可以用于跨两个维度索引位置的单个值。

有人知道这是否可行吗?

【问题讨论】:

  • 你想改变数组的尺寸坐标吗?或者有一个具有不同尺寸坐标的数组?
  • @Maximilian 理想情况下,我想要一个可以由具有不同维度的坐标索引的数组。在我的示例中,我可以将时间序列存储在二维数组中,一个轴是日期,另一个轴是一天中的时间。我希望能够指定一个称为时间的一维坐标,它可以跨这两个轴进行索引。
  • 你所说的“一维坐标……可以跨这两个轴索引”是什么意思?
  • @Maximilan 对不起,我解释得不好。假设我有一个 2D xarray,一个轴是 3 长,另一个是 4 长。我想添加一个 12 长的坐标。这就像 DataArray.stack(),但我想在每个索引处设置一个值,而不是 MultiIndex 在每个索引处有多个值。也许这是可能的另一种方式,例如。通过堆叠创建一个新的 MultiIndex 坐标,然后添加另一个坐标,该坐标具有自己的一组引用该 MultiIndex 坐标的值? xarrays中的坐标可以相互索引,还是只能直接索引数组中的轴?
  • 您希望您的最终阵列是什么样的? 3x4 还是 12x1? Xarray 仅允许沿数组中每个维度的索引,因此您不能在 4x3 数组上拥有 12x1 索引。 [续]

标签: pandas numpy python-xarray


【解决方案1】:

目前 xarrays 无法做到这一点。

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 2019-06-28
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    相关资源
    最近更新 更多