这些数组形状之间的区别(以 numpy 为单位)



形状为

-

(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)

有人可以解释其中的区别吗?

形状

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

形状数组(442, )是一维的,由 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 广播规则允许在需要时在左侧自动添加新轴。所以(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)

最新更新