如何合并多个xarray数据变量及其坐标?

2024-06-30 14:20:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个xarray数据集:

<xarray.Dataset>
Dimensions:         (AND obs_dim_0: 36, NAND obs_dim_0: 37, NOR obs_dim_0: 36, OR obs_dim_0: 30, XNOR obs_dim_0: 34, XOR obs_dim_0: 34, chain: 4, draw: 500)
Coordinates:
  * chain           (chain) int64 0 1 2 3
  * draw            (draw) int64 0 1 2 3 4 5 6 7 ... 493 494 495 496 497 498 499
  * AND obs_dim_0   (AND obs_dim_0) int64 0 1 2 3 4 5 6 ... 29 30 31 32 33 34 35
  * NAND obs_dim_0  (NAND obs_dim_0) int64 0 1 2 3 4 5 6 ... 31 32 33 34 35 36
  * NOR obs_dim_0   (NOR obs_dim_0) int64 0 1 2 3 4 5 6 ... 29 30 31 32 33 34 35
  * OR obs_dim_0    (OR obs_dim_0) int64 0 1 2 3 4 5 6 ... 23 24 25 26 27 28 29
  * XNOR obs_dim_0  (XNOR obs_dim_0) int64 0 1 2 3 4 5 6 ... 28 29 30 31 32 33
  * XOR obs_dim_0   (XOR obs_dim_0) int64 0 1 2 3 4 5 6 ... 27 28 29 30 31 32 33
Data variables:
    AND obs         (chain, draw, AND obs_dim_0) float64 3.802 5.118 ... 4.205
    NAND obs        (chain, draw, NAND obs_dim_0) float64 5.619 6.705 ... 6.633
    NOR obs         (chain, draw, NOR obs_dim_0) float64 4.515 6.268 ... 5.068
    OR obs          (chain, draw, OR obs_dim_0) float64 4.323 5.856 ... 6.111
    XNOR obs        (chain, draw, XNOR obs_dim_0) float64 3.441 5.183 ... 7.014
    XOR obs         (chain, draw, XOR obs_dim_0) float64 4.9 6.517 ... 5.65
Attributes:
    created_at:                 2019-10-20T20:12:11.936807
    inference_library:          pymc3
    inference_library_version:  3.7

我想把它转换成一个带有单个数据变量(称之为obs)的数据集,并带有一个新的维度gate,它接受值['AND, 'NAND', 'NOR'. 'OR', 'XNOR', 'XOR']。我还想把六个不同的维度/坐标(AND obs_dim_0NAND obs_dim_0,等等)展平成一个var_idx维度。这样我就可以通过使用ds.sel(gate='AND', obs_idx=n)来处理值

有很多关于融合数据集的讨论,我觉得我应该能够使用一些split-apply组来划分这个数据集并将它放回一起,但是我不明白。我试过选择变量然后叠加,但是我得到的是xarray而不是数据集。我尝试过将维度重命名为all obs_idx,但是当我尝试设置坐标时,我做不到,因为不同的维度有不同的大小


Tags: orand数据chainxarraydrawdimfloat64