在第三维上查找xarray DataArray的最大值。

时间:2018-10-29 09:23:16

标签: python max python-xarray

我有一个3维xarray DataArray,其中两个维代表一个x-y网格,第三个维代表彼此“堆叠”的网格层数。空的DataArray看起来像这样:

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 numpy数组。

我可以解决这一问题,方法是遍历每一层,将当前层的网格值与创建的2d max_val_grid进行比较,然后进行三维过滤。但是,这听起来效率很低。

你们中有谁知道如何使用内部xarray或numpy函数解决此问题而不循环?

非常感谢!

2 个答案:

答案 0 :(得分:1)

您可以按以下方式使用numpy.amax

numpy.amax(your_3D_array, axis=2)

这将在3D数据的最后一个轴上选择your_3D_array的最大值,并返回一个2D数组。这是一个快速的测试案例:

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

答案 1 :(得分:0)

xarray中的max()方法正好满足您的需求,例如dataArray.max('layer')