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)