numpy中这些数组形状之间的差异

时间:2014-12-19 17:11:07

标签: python arrays numpy

形状为 -

的2个数组之间有什么区别

(442,1)(442,)

打印这两个产生相同的输出,但是当我检查相等 == 时,我得到这样的2D矢量 -

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

有人可以解释一下这个区别吗?

1 个答案:

答案 0 :(得分:37)

形状(442, 1)的数组是二维的。它有442行和1列。

形状(442, )的数组是1维的,由442个元素组成。

请注意,他们的代表也应该看起来不一样。括号的数量和位置存在差异:

In [7]: np.array([1,2,3]).shape
Out[7]: (3,)

In [8]: np.array([[1],[2],[3]]).shape
Out[8]: (3, 1)

请注意,您可以使用np.squeeze删除长度为1的轴:

In [13]: np.squeeze(np.array([[1],[2],[3]])).shape
Out[13]: (3,)

NumPy broadcasting rules允许在需要时自动在左侧添加新轴。因此(442,)可以广播到(1, 442)。并且长度为1的轴可以广播到任何长度。所以 当你测试一个形状(442, 1)数组和一个形状(442, )数组之间的相等性时,第二个数组会被提升为形状(1, 442)然后两个数组展开它们的长度为1的轴他们都成为广播的形状阵列(442, 442)。这就是为什么当你测试相等性时,结果是一个形状为(442, 442)的布尔数组。

In [15]: np.array([1,2,3]) == np.array([[1],[2],[3]])
Out[15]: 
array([[ True, False, False],
       [False,  True, False],
       [False, False,  True]], dtype=bool)

In [16]: np.array([1,2,3]) == np.squeeze(np.array([[1],[2],[3]]))
Out[16]: array([ True,  True,  True], dtype=bool)