【问题标题】:Finding highest values of xarray DataArray along the third dimension.沿第三维查找 xarray DataArray 的最高值。
【发布时间】:2019-04-02 04:42:08
【问题描述】:

我有一个 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 函数来解决这个问题而无需循环?

非常感谢!

【问题讨论】:

    标签: python max python-xarray


    【解决方案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))
    

    【讨论】:

      【解决方案2】:

      xarray 中的 max() 方法完全符合您的要求,例如 dataArray.max('layer')

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-30
        • 1970-01-01
        • 2019-06-28
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        相关资源
        最近更新 更多