代码之家  ›  专栏  ›  技术社区  ›  user2100039

放置坐标XArray数组

  •  0
  • user2100039  · 技术社区  · 5 年前

    我有一个xarray DataArray,它看起来像下面的shape(1,5,73144,17),我试图删除或删除“level”坐标。所以,最终,我需要变量的shape=(1,5,73144)。

    stdna
    Out[717]: 
    <xarray.DataArray 'stack-6e9b86fc65e3f0fda2008a339e235bc7' (variable: 1, week: 5, lat: 73, lon: 144, 
    level: 17)>
    dask.array<stack, shape=(1, 5, 73, 144, 17), dtype=float32, chunksize=(1, 1, 73, 144, 17), 
    chunktype=numpy.ndarray>
    Coordinates:
    * lon       (lon) float32 0.0 2.5 5.0 7.5 10.0 ... 350.0 352.5 355.0 357.5
    * lat       (lat) float32 90.0 87.5 85.0 82.5 80.0 ... -82.5 -85.0 -87.5 -90.0
    * level     (level) float32 1000.0 925.0 850.0 700.0 ... 50.0 30.0 20.0 10.0
    * week      (week) int64 5 6 7 8 9
    * variable  (variable) <U3 'hgt'
    

    我已经看了xarray文档,但它没有帮助。我尝试过围绕这个想法的不同组合,但我通常会得到下面的陈述,并且坐标没有被删除:

    s = stdna.drop('level', dim=None)
    
    Dimensions without coordinates: level
    

    0 回复  |  直到 5 年前
        1
  •  1
  •   P.B.UDAY    5 年前

    最初,我观察了drop的行为,发现它并没有删除维度。它可以用来删除数据变量。

    然后我试了一下:

    del stdna['level']
    

    stdna.drop_dims('level')
    

    我还试过一件事:

    stdna = stdna.drop([i for i in stdna.coords if i not in stdna.dims])
    

    看看我能不能概括这个问题。但我不认为这会很好。 来自文档: http://xarray.pydata.org/en/stable/generated/xarray.Dataset.drop_dims.html

        2
  •  0
  •   Maximilian    5 年前

    你可以使用 drop_vars

    In [10]: da
    Out[10]:
    <xarray.DataArray (dim_0: 2, dim_1: 3)>
    array([[0.15928504, 0.47081089, 0.50490985],
           [0.6151981 , 0.41735643, 0.2576089 ]])
    Coordinates:
        x        (dim_0, dim_1) float64 0.1593 0.4708 0.5049 0.6152 0.4174 0.2576
    Dimensions without coordinates: dim_0, dim_1
    
    In [11]: da.drop_vars('x')
    Out[11]:
    <xarray.DataArray (dim_0: 2, dim_1: 3)>
    array([[0.15928504, 0.47081089, 0.50490985],
           [0.6151981 , 0.41735643, 0.2576089 ]])
    Dimensions without coordinates: dim_0, dim_1
    

    或者 reset_coords('level', drop=True 也会有用的

        3
  •  0
  •   Michael Delgado    5 年前

    派对迟到了,但万一有人碰到这个。。。

    level . 为了从数据中“删除”级别维度,您需要决定如何减少该维度上的信息。

    你可以用各种方法来做这件事。如果你想的话 选择 从数组中选择一个级别,然后 da.sel

    stdna.sel(level=1000)
    

    另一方面,也许你想 聚合 水平维度上的数据?例如,可以取所有级别的平均值:

    stdna.mean(dim='level')
    

    但是,如果不知道如何从按级别索引的DataArray变为不按级别索引的DataArray,xarray就无法简单地从数据中“删除”它—数组仍将成形 (1,5,73,144,17)

    查看上的文档 indexing and selecting data computation: aggregation