首页 > 解决方案 > 找到条件真实的第一层

问题描述

使用这两个示例 numpy 数组:

dis = np.array([[[40,42,44],   
                 [41,43,45],       
                 [41.5,43.5,45.5]],
                 [[35,37,39],      
                 [36,38,40],       
                 [36.5,38.5,40.5]],
                 [[30,32,34],      
                 [31,33,35],       
                 [31.5,33.5,35.5]],
                 [[22,24,26],
                 [23,25,27],
                 [23.5,25.5,27.5]]])

hd = np.array([[[36.6, 37.4, 38.3],
                [37.1, 39.0, 37.8],
                [34.0, 32.0, 30.4]],
                [[36.5, 37.3, 38.2],
                [37.0, 38.9, 37.7],
                [33.9, 31.9, 30.3]],
                [[36.4, 37.2, 38.1],
                [36.9, 38.8, 37.6],
                [33.8, 31.8, 30.2]],
                [[36.3, 37.1, 38.0],
                [36.8, 38.7, 37.5],
                [33.7, 31.7, 30.1]]])

hd我首先取数组的平均值,使用hd_mn=hd.mean(axis=0)which 产生:

array([[36.45, 37.25, 38.15],
       [36.95, 38.85, 37.65],
       [33.85, 31.85, 30.25]])

然后,使用这个数组,我想检索一个二维数组,其中包含hd_mn大于的第一个索引dis。所以换句话说,我会得到一个如下的数组:

[[1, 1, 1],
 [1, 1, 2],
 [2, 3, 3]]

例如,位置 (0, 0) of 的值 36.45 在第 0hd_mn层中的相同位置小于 40,但在下一层中大于 35。是否有单行执行此操作?

标签: pythonnumpy

解决方案


您直接使用大于比较器,然后ndarray.sum在此处使用布尔值。

(dis > hd_mn).sum(0)

array([[1, 1, 2],
       [1, 1, 2],
       [2, 3, 3]])

细节

dis > hd_mn

array([[[ True,  True,  True], # --\
        [ True,  True,  True], #    |-> dis[0] > hd_mn
        [ True,  True,  True]],# --/

       [[False, False,  True], # --\
        [False, False,  True], #    |-> dis[1] > hd_mn
        [ True,  True,  True]],# --/

       [[False, False, False], # --\
        [False, False, False], #    |-> dis[2] > hd_mn
        [False,  True,  True]],# --/

       [[False, False, False],   # --\
        [False, False, False],   #    |-> dis[3] > hd_mn
        [False, False, False]]]) # --/

推荐阅读