我有一个使用多维坐标的netcdf文件。 我的 xarray 数据集如下所示
<xarray.Dataset>
Dimensions: (Time: 48, bottom_top: 50, bottom_top_stag: 51,
soil_layers_stag: 4, south_north: 1015, south_north_stag: 1016, west_east: 1359, west_east_stag: 1360)
Coordinates:
XLAT (Time, south_north, west_east) float32 18.1363 18.1456 ...
XLAT_U (Time, south_north, west_east_stag) float32 18.1316 ...
XLAT_V (Time, south_north_stag, west_east) float32 18.1198 ...
XLONG (Time, south_north, west_east) float32 -122.884 ...
XLONG_U (Time, south_north, west_east_stag) float32 -122.901 ...
XLONG_V (Time, south_north_stag, west_east) float32 -122.879 ...
* Time (Time) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
* south_north (south_north) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
* west_east (west_east) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
* bottom_top (bottom_top) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
Data variables:
GRAUPEL_ACC_NC (Time, south_north, west_east) float32 0.0 0.0 0.0 0.0 ...
P (Time, south_north, west_east) float32 101112.0 ...
PREC_ACC_NC (Time, south_north, west_east) float32 0.0 0.0 0.0 0.0 ...
QVAPOR (Time, south_north, west_east) float32 0.0120251 ...
SNOW_ACC_NC (Time, south_north, west_east) float32 0.0 0.0 0.0 0.0 ...
TK (Time, south_north, west_east) float32 295.372 295.367 ...
Z (Time, south_north, west_east) float32 0.0 0.0 0.0 0.0 ...
我希望通过物理坐标(XLAT和XLONG)获得数据的子集。 例如,子集 TK 以获得落在 49 到 55N 和 -125 到 -115W 之间的网格点。
切片数据不起作用,例如TK[782:898,179:409],因为切片的网格点不遵循我需要的恒定纬度和经度线。
有一个使用 groupby.bins 的例子,但我根本无法弄清楚。我还尝试使用where来屏蔽域外的值,但没有成功。
如果有人有任何建议,将不胜感激!
这是where
drop=True
的完美用例。类似以下内容的内容应该有效:
ds.where((-125 < ds.XLON) & (ds.XLON < -115)
& (49 < ds.XLAT) & (ds.XLAT < 55), drop=True)
无论如何,where
都应该有效,但数据集的另一个问题是空间坐标(XLON 和 XLAT)包含"时间"作为维度。这些变量真的会随时间而变化吗?如果没有,您可能需要调整它们以删除时间维度。