关于np.all与轴的使用

时间:2017-11-04 04:18:05

标签: python python-3.x numpy scipy

我尝试测试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)

我不明白c中TRUE是如何通过np.all(a==b,axis=1)获得的。{/ p>

2 个答案:

答案 0 :(得分:2)

由于您使用axis=1呼叫np.all(),因此将在第一维上执行逻辑AND,即所有列(编号从零开始)。

你的阵列是:

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将通过AND操作,给出结果{{1} }。所有操作如下:

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](请参阅NumPy broadcasting rules),该操作在[1, 1, 3]上执行。否则,结果将是index=1的形状。

答案 1 :(得分:1)

关键是要了解ba的广播方式。

a是(2,4,3)(我喜欢不同的维度)。

b是(3,),广播到(1,1,3)。

In [708]: a==b
Out[708]: 
array([[[False,  True, False],
        [False,  True, False],
        [False,  True, False],
        [False,  True, False]],

       [[False,  True,  True],
        [ True, False,  True],
        [False,  True, False],
        [ True,  True, False]]], dtype=bool)

{1}}应用于轴= 1,大小为4(显示中的列)。结果是(2,3)形状。

同样的广播和轴减少发生在:

all