关于np.all与轴的用法


问题内容

我试图测试的用法np.all,测试数组a

 a=array([[[  0,   0,   0],
        [  0,   0,   0],
        [  0,   0,   0],
        [  0,   0,   0]],

       [[  0,   0, 255],
        [255, 255, 255],
        [  0,   0,   0],
        [255,   0,   0]]])

b = [255,0,255]
c = np.all(a==b,axis=1)

我有

c= array([[False,  True, False],
   [False, False, False]], dtype=bool)

我不明白TRUEc是从运行中获得的np.all(a==b,axis=1)


问题答案:

由于您呼叫np.all()axis=1,逻辑,并将在第一个维度,即所有的列(从零开始编号)进行。

您的数组是:

a = np.array([[[0,   0,   0],
            [0,   0,   0],
            [0,   0,   0],
            [0,   0,   0]],

           [[0,   0, 255],
            [255, 0, 255],
            [0,   0,   0],
            [255,   255,   0]]])

因此,第一栏a,即[0, 0, 0, 0]和的第一个元素b,即255会经过与运算,给出结果False。所有操作如下:

[0, 0, 0, 0] & 255 => False
[0, 0, 0, 0] & 0 => True
[0, 0, 0, 0] & 255 => False

[0, 255, 0, 255] & 255 => False
[0, 255, 0, 0] & 0 => False
[255, 255, 0, 0] & 255 => False

这将得出以下最终结果:

[[False  True False]
 [False False False]]

由于未传递keepdims=True参数,因此结果列表的形状[2, 3]即来自[2, 4, 3][1, 1, 3](请参见NumPy广播规则),因此将在上执行操作index=1。否则,结果将为shape [2, 1, 3]