numpy.all轴参数不正常?


问题内容

我有以下数组。

a = np.array([[0, 5, 0, 5],
              [0, 9, 0, 9]])
>>>a.shape 
Out[72]: (2, 4)

>>>np.all(a,axis=0)
Out[69]: 
array([False,  True, False,  True], dtype=bool)

>>>np.all(a,axis=1)
Out[70]: 
array([False, False], dtype=bool)

由于轴0表示二维数组中的第一个轴(行),

我期望np.all(a,axis=0)给定时,它每行检查所有元素是否为True。

但是似乎检查 每列 会导致输出为4个元素,例如array([False, True, False, True], dtype=bool)

我对np.all的功能有什么误解?


问题答案:

axis=0表示将元素 沿着 轴0a[0, 0]进行“与”运算,因此将“与”与a[1, 0]a[0, 1]将“与”与a[1, 1]“等”。指定的轴已折叠。

您可能会认为它需要np.all(a[0])np.all(a[1])等等,通过沿轴0进行索引并np.all在每个子数组上执行操作来选择子数组。这与它的工作方式相反。会折叠除指定轴以外的所有轴。

对于2D阵列,一种约定比另一种约定没有太多优势,但是对于3D及更高版本,NumPy选择的约定更加有用。