使用 Python Xarray 的特定经纬度坐标的平均值
Mean for specific lat lon coords using Python Xarray
我想使用 Xarray 计算特定经纬度点的平均值:(-41.25, -3.75)、(-38.75, -6.25) 和 (-38.75, -3.75)。这是一个简单的想法,获取点的值并计算平均值。
我看到 xarray.DataArray.sel_points 函数已经停用,我不知道如何仅使用 xarray.DataArray.sel[= 来计算17=].
假设您有以下 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
并且您想 select 以下(经度、纬度)点:
>>> points = [(0, 0), (0, 1), (2, 1)] # list(tuple(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
从那里,您可以 select 积分:
>>> 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
个值,其中新网格的点未被 select 编辑(这就是我们首先堆叠的原因)。
我想使用 Xarray 计算特定经纬度点的平均值:(-41.25, -3.75)、(-38.75, -6.25) 和 (-38.75, -3.75)。这是一个简单的想法,获取点的值并计算平均值。
我看到 xarray.DataArray.sel_points 函数已经停用,我不知道如何仅使用 xarray.DataArray.sel[= 来计算17=].
假设您有以下 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
并且您想 select 以下(经度、纬度)点:
>>> points = [(0, 0), (0, 1), (2, 1)] # list(tuple(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
从那里,您可以 select 积分:
>>> 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
个值,其中新网格的点未被 select 编辑(这就是我们首先堆叠的原因)。