Нахождение максимальных значений xarray DataArray в третьем измерении. - PullRequest
0 голосов
/ 29 октября 2018

У меня есть трехмерный xarray DataArray, где два измерения представляют сетку x-y, а третье - количество слоев сетки, «сложенных» друг на друга. Пустой массив данных выглядит следующим образом:

import xarray as xr
import numpy as np

data = np.zeros(shape=(layers,y,x))
dims=['layer','y_Axis', 'x_Axsis']
dataArray = xr.DataArray(data,dims=dims)

Внутри подпрограммы я заполняю сетки слоями, значениями от -1 до 1.

Моя задача теперь состоит в том, чтобы объединить все слои в один, выбирая самые высокие значения всех сеток вместе взятых. Поэтому, когда, например, 5 слоев сравниваются друг с другом, самые высокие элементы в сетке будут сохранены в двумерном массиве.

Я мог бы решить эту проблему, просматривая каждый слой, сравнивая значения сетки текущего слоя с созданной 2d max_val_grid и, таким образом, фильтруя третье измерение. Однако это звучит очень неэффективно.

Кто-нибудь из вас знает, как решить эту проблему, используя внутренние функции xarray или numpy без циклов?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Метод max() в xarray делает именно то, что вы ищете, например, dataArray.max('layer').

0 голосов
/ 29 октября 2018

Вы можете использовать numpy.amax следующим образом

numpy.amax(your_3D_array, axis=2)

Это выберет максимальные значения your_3D_array на последней оси трехмерных данных и вернет двумерный массив. Вот быстрый тестовый пример:

import numpy as np

x = np.arange(10)
y = np.arange(10, 20)
z = np.arange(20, 30)

x, y, z = np.meshgrid(x, y, z)

print(np.amax(z, axis=2))
...