从xarray数据数组中删除坐标

2024-10-01 00:32:23 发布

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

我有一个xarray数据数组,它的形状如下(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

谢谢你的帮助


Tags: 数据stack数组outlevelvariable形状xarray
3条回答

晚会迟到了,但万一有人碰到这个

不能删除这样的维度的原因是,数据实际上是由level索引的。为了从数据中“删除”级别维度,您需要决定如何减少该维度上的信息

你可以用各种方法来做。如果您想从数组中选择一个级别,那么da.sel就是您想要的,例如:

stdna.sel(level=1000)

另一方面,您可能希望聚合整个级别维度的数据?例如,可以取所有级别的平均值:

stdna.mean(dim='level')

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

有关这些主题的更多信息,请参阅indexing and selecting datacomputation: aggregation上的文档

最初,我观察了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

您可以使用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也会起作用

相关问题 更多 >