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

goe*_*ash 33 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)
Run Code Online (Sandbox Code Playgroud)

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

unu*_*tbu 41

形状阵列(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)
Run Code Online (Sandbox Code Playgroud)

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

In [13]: np.squeeze(np.array([[1],[2],[3]])).shape
Out[13]: (3,)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

  • `(422,)`中的逗号表示表达式是一个元组.这是一个内部有一个元素的元组.没有逗号,`(422)`被评估为整数'422`.数组的形状总是一个元组. (13认同)
  • 大小(1,442)和(442)的数组是否相同? (2认同)