为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Python Xarray 的特定经纬度坐标的平均值

使用 Python Xarray 的特定经纬度坐标的平均值

SMILET 2023-03-08 15:47:55
我想使用 Xarray 计算特定经纬度点的平均值:(-41.25, -3.75)、(-38.75, -6.25) 和 (-38.75, -3.75)。这是一个简单的想法,获取点的值并计算平均值。我读到xarray.DataArray.sel_points函数已停用,我不知道如何仅使用xarray.DataArray.sel进行计算。
查看完整描述

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值未选择新网格的点(这就是我们首先堆叠的原因)。


查看完整回答
反对 回复 2023-03-08
  • 1 回答
  • 0 关注
  • 589 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号