Среднее значение для заданных c координат широты и долготы с использованием Python Xarray - PullRequest
0 голосов
/ 14 июля 2020

Я хотел бы вычислить среднее значение определенных c длинных точек с помощью Xarray: (-41,25, -3,75), (-38,75, -6,25) и (-38,75, -3,75). Это простая идея - получить значения точек и вычислить среднее.

Я читал, что функция xarray.DataArray.sel_points была прекращена, и я не знаю, как для расчета с использованием только xarray.DataArray.sel .

1 Ответ

2 голосов
/ 14 июля 2020

Допустим, у вас есть следующий 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

И вы хотите выбрать следующие точки (долгота, широта):

>>> 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

Оттуда вы можете выбрать точки:

>>> 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 значения, в которых точки новой сетки не были выбрано (поэтому мы сложили в первую очередь).

...