【问题标题】:Stack xarray DataArray堆栈 xarray 数据数组
【发布时间】:2019-06-18 03:47:46
【问题描述】:

我有 N 1D xr.DataArray's 与 1 array 坐标 b 和 1 scalar 坐标 a。我想将它们与array 坐标ba 组合成二维DataArray。这个怎么做?我试过了:

x1 = xr.DataArray(np.arange(0,3)[...,np.newaxis], coords=[('b', np.arange(3,6)),('a', [10])]).squeeze()
x2 = xr.DataArray(np.arange(0,3)[...,np.newaxis], coords=[('b', np.arange(3,6)),('a', [11])]).squeeze()

xcombined = xr.concat([x1, x2])
xcombined

结果:

<xarray.DataArray (concat_dims: 2, b: 3)>
array([[0, 1, 2],
       [0, 1, 2]])
Coordinates:
  * b        (b) int64 3 4 5
    a        (concat_dims) int64 10 11
Dimensions without coordinates: concat_dims

现在我特别喜欢选择一个'a':

xcombined.sel(a=10)

但是,这会引发:

ValueError: dimensions or multi-index levels ['a'] do not exist

【问题讨论】:

    标签: python python-xarray


    【解决方案1】:

    如果您将dim 提供给concat,则可以:

    xcombined = xr.concat([x1, x2], dim='a')
    

    然后:

    xcombined.sel(a=10)
    
    <xarray.DataArray (b: 3)>
    array([0, 1, 2])
    Coordinates:
      * b        (b) int64 3 4 5
        a        int64 10
    

    【讨论】:

    • 但现在数组 x2 中的信息(指定 a=11 的值)丢失了
    • 对,因为x2 没有a=10。如果您查看xcombined 而不调用.sel(a=10),您还会看到a=11 的值
    猜你喜欢
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 2018-04-27
    • 2011-07-14
    • 2020-06-12
    • 2022-01-22
    相关资源
    最近更新 更多