1 回答

TA貢獻1772條經驗 獲得超5個贊
假設您有以下 DataArray:
>>> da
<xarray.DataArray (time: 5, lon: 4, lat: 3)>
array([[[...]]])
Coordinates:
* time (time) int64 0 1 2 3 4
* lon (lon) int64 0 1 2 3
* lat (lat) int64 0 1 2
并且您想選擇以下 (lon, lat) 點:
>>> points = [(0, 0), (0, 1), (2, 1)] # list(tuple(lon, lat), ...)
然后,您不會堅持使用原始的 (lon, lat) 網格,因此您可以將這些維度堆疊在一起:
>>> da.stack(pos=("lon", "lat"))
<xarray.DataArray (time: 5, pos: 12)>
array([[...]])
Coordinates:
* time (time) int64 0 1 2 3 4
* pos (pos) MultiIndex
- lon (pos) int64 0 0 0 1 1 1 2 2 2 3 3 3
- lat (pos) int64 0 1 2 0 1 2 0 1 2 0 1 2
從那里,您可以選擇點:
>>> da.stack(pos=("lon", "lat")).sel(pos=points)
<xarray.DataArray (time: 5, pos: 3)>
array([[...]])
Coordinates:
* time (time) int64 0 1 2 3 4
* pos (pos) MultiIndex
- lon (pos) int64 0 0 2
- lat (pos) int64 0 1 1
計算它們的平均時間:
>>> da.stack(pos=("lon", "lat")).sel(pos=points).mean("time")
<xarray.DataArray (pos: 3)>
array([24., 25., 31.])
Coordinates:
* pos (pos) MultiIndex
- lon (pos) int64 0 0 2
- lat (pos) int64 0 1 1
并且,如果需要,通過取消堆疊返回到原始網格:
>>> da.stack(pos=("lon", "lat")).sel(pos=points).mean("time").unstack("pos")
<xarray.DataArray (lon: 2, lat: 2)>
array([[24., 25.],
[nan, 31.]])
Coordinates:
* lon (lon) int64 0 2
* lat (lat) int64 0 1
請注意,會有一些nan值未選擇新網格的點(這就是我們首先堆疊的原因)。
添加回答
舉報