我有一个具有三个坐标的 DataArray,我想从其中一个维度中删除包含所有零的数组,但我似乎无法正确处理。数据数组 (old_array) 如下所示,如您所见,有相当多的数组用零填充。
<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: dimension 'x1 y5 z3' does not have coordinate labels.
我想告诉 xarray “如果'x2 y3 z7'是一个全为零的数组,然后删除它”,但我不知道该怎么做。
仍然很难说出你想做什么,但据我所知,你想删除数组中等于零的部分。为此,您应该将
DataArray.where
与 drop=True
: 一起使用
old_array.where(old_array > 0, drop=True)
drop_sel
用于根据其值删除索引标签。