从xarray DataArray中删除零



我有一个具有三个坐标的DataArray,我想从一个维度中删除包含所有零的数组,但我似乎无法得到正确的结果。数据数组(old_array)如下所示,您可以看到有相当多的数组都是用0填充的。

<xarray.DataArray (dim1: 100, dim2: 100, dim3: 100)>
array([[[81.20, 13.20, 12.24, ..., 81.24,
14.61, 85.58],
[31.34, 83.96, 02.97, ..., 46.88,
01.81, 48.24],
[43.54, 12.50, 35.33, ..., 39.23,
91.93, 01.21],
[37.95, 75.59, 71.00, ..., 15.14,
68.76, 44.56],
[54.31, 48.99, 85.59, ..., 15.58,
86.48, 81.19]],
[[ 0.  ,  0.  ,  0.  , ...,  0.  ,
0.  ,  0.  ],            
[ 0.  ,  0.  ,  0.  , ...,  0.  ,
0.  ,  0.  ],            
[ 0.  ,  0.  ,  0.  , ...,  0.  ,
0.  ,  0.  ],            
[ 0.  ,  0.  ,  0.  , ...,  0.  ,
0.  ,  0.  ],            
[ 0.  ,  0.  ,  0.  , ...,  0.  ,
...                                
0.  ,  0.  ],            
[ 0.  ,  0.  ,  0.  , ...,  0.  ,
0.  ,  0.  ],            
[ 0.  ,  0.  ,  0.  , ...,  0.  ,
0.  ,  0.  ],            
[ 0.  ,  0.  ,  0.  , ...,  0.  ,
0.  ,  0.  ],            
[ 0.  ,  0.  ,  0.  , ...,  0.  ,
0.  ,  0.  ]],           

[[ 0.  ,  0.  ,  0.  , ...,  0.  ,
0.  ,  0.  ],            
[ 0.  ,  0.  ,  0.  , ...,  0.  ,
0.  ,  0.  ],            
[ 0.  ,  0.  ,  0.  , ...,  0.  ,
0.  ,  0.  ],            
[ 0.  ,  0.  ,  0.  , ...,  0.  ,
0.  ,  0.  ],            
[ 0.  ,  0.  ,  0.  , ...,  0.  ,
0.  ,  0.  ]]])
Coordinates:
* dim1  (dim1) <U7 'x0 y0 z0' 'x1 y0 z0' 'x2 y0 z0' ... 'x10 y10 z8' 'x10 y10 z9' 'x10 y10 z10'
* dim2  (dim2) float64 0.0 0.1 0.2 ... 9.8 9.9 10.0
* dim3  (dim3) float64 0.5 1.0 1.5 ... 49.0 49.5 50.0

我试着

new_array = old_array.drop_sel(dim1 = np.zeros(100))

但是它给了我KeyError: "不是索引'dim1'中的所有值">

我也试过

new_array = old_array.drop(np.zeros(100), dim1)

但是我有一个ValueError:维度'x1 y5 z3'没有坐标标签。

我想告诉xarray "如果'x2 y3 z7'是一个全0的数组,然后删除它",但我不知道怎么做。

仍然有点难以判断你想要做什么,但据我所知,你想要删除数组中等于零的部分。为此,您应该使用DataArray.wheredrop=True:

old_array.where(old_array > 0, drop=True)

drop_sel用于根据索引标签的值删除索引标签。