我有一个使用多维坐标的netcdf文件。我的xarray数据集看起来像这样
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
with 的完美用例drop=True
。类似于以下内容的东西应该起作用:
ds.where((-125 < ds.XLON) & (ds.XLON < -115) & (49 < ds.XLAT) & (ds.XLAT < 55), drop=True)
where
无论如何,它都应该起作用,但是与数据集有关的另一个问题是您的空间坐标(XLON和XLAT)将“时间”作为维度。这些变量确实会随时间变化吗?如果不是,则可能需要调整它们以删除时间范围。