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个或更多维度。最初的2d矩阵是MATLAB所有的。
要有意义地谈论转置,您必须至少有2个维度。一个可能有一个大小,并映射到一维矢量,但它仍然是一个矩阵,一个2D对象。
因此,将维度添加到1d数组中,无论是使用reshape
还是[:,None]
都不是黑客。这是一个完美的有效和正常的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)阵列。 (3,5)。其中,(3)中的每一个都代表所述第一个字母数字字母,第二个字母数字字母代表所述第一个字母数字字符。
产生一个错误,因为它无法确定您想要(5,3)或(3,5)或其他东西。
NumPy不是面向矩阵的。如果你愿意,你可以把它看作张量导向。一维数组没有两个维度来交换转置。 – user2357112