我有一个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函数解决此问题而不循环?
非常感谢!
答案 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')
。