https://en.wikipedia.org/wiki/Transpose - 这篇关于转置的文章只讨论转置矩阵。
https://en.wikipedia.org/wiki/Row_and_column_vectors -
列向量或列矩阵是一个 m × 1 矩阵
行向量或行矩阵是 1 × m 矩阵
您可以轻松创建行或列向量(矩阵):
In [464]: np.array([[1],[2],[3]]) # column vector
Out[464]:
array([[1],
[2],
[3]])
In [465]: _.shape
Out[465]: (3, 1)
In [466]: np.array([[1,2,3]]) # row vector
Out[466]: array([[1, 2, 3]])
In [467]: _.shape
Out[467]: (1, 3)
但在numpy 中,基本结构是array,而不是向量或矩阵。
[计算机科学中的数组] - 通常,可以通过运行时计算的索引选择的数据项的集合
numpy 数组可以有 0 个或多个维度。相比之下,MATLAB 矩阵具有 2 维或更多维。最初,二维矩阵是 MATLAB 所拥有的。
要有意义地谈论转置,您必须至少有 2 个维度。一个可能大小为 1,并映射到一个 1d 向量,但它仍然是一个矩阵,一个 2d 对象。
因此,向一维数组添加维度,无论是使用 reshape 还是 [:,None] 完成都不是 hack。这是一个完美有效且正常的 numpy 操作。
基本的广播规则是:
在本例中,两个步骤都适用:(5,)=>(1,5)=>(3,5)
In [458]: np.broadcast_to(np.arange(5), (3,5))
Out[458]:
array([[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]])
在此,我们必须在右侧(结束)显式添加一维尺寸:
In [459]: np.broadcast_to(np.arange(5)[:,None], (5,3))
Out[459]:
array([[0, 0, 0],
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4]])
np.broadcast_arrays(np.arange(5)[:,None], np.arange(3)) 产生两个 (5,3) 数组。
np.broadcast_arrays(np.arange(5), np.arange(3)[:,None]) 使 (3,5)。
np.broadcast_arrays(np.arange(5), np.arange(3)) 会产生错误,因为它无法确定您想要 (5,3) 还是 (3,5) 或其他东西。