我尝试测试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>
答案 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)
关键是要了解b
与a
的广播方式。
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