在学习了矩阵乘法之后,另一个你需要掌握的基本运算是转置。本质上,转置矩阵是一个简单的操作:它将矩阵沿其主对角线“翻转”。主对角线是从左上角延伸至右下角的一组元素。当你转置一个矩阵时,它的行变为列,列变为行。如果你将矩阵视为表示一个数据集,其中行是数据样本,列是特征,那么转置操作有效地交换了这种表示方式。转置后,行将代表特征,列将代表数据样本。这种重新调整数据方向的能力出乎意料的有效,并常被用于数据预处理和机器学习算法的构建中。转置机制矩阵 $A$ 的转置记作 $A^T$。规则很简单: $A$ 中第 $i$ 行第 $j$ 列的元素变为 $A^T$ 的第 $j$ 行第 $i$ 列的元素。如果原始矩阵 $A$ 的维度为 $m \times n$ (意即 $m$ 行 $n$ 列),那么它的转置 $A^T$ 的维度将是 $n \times m$。我们来看一个例子。考虑以下 $2 \times 3$ 矩阵 $A$:$$ A = \begin{bmatrix} 1 & 2 & 3 \ 4 & 5 & 6 \end{bmatrix} $$要找到它的转置 $A^T$,我们将 $A$ 的第一行 [1, 2, 3] 变为 $A^T$ 的第一列。然后将 $A$ 的第二行 [4, 5, 6] 变为 $A^T$ 的第二列。得到的矩阵是:$$ A^T = \begin{bmatrix} 1 & 4 \ 2 & 5 \ 3 & 6 \end{bmatrix} $$可以看到,维度已经从 $2 \times 3$ 翻转为 $3 \times 2$。下图展示了这种沿着主对角线的翻转操作。digraph G { rankdir=TB; node [shape=plaintext, fontname="Arial"]; subgraph cluster_A { label = "原始矩阵 A (2x3)"; style=dashed; a [label=< <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> <TR><TD BGCOLOR="#a5d8ff">1</TD><TD>2</TD><TD>3</TD></TR> <TR><TD>4</TD><TD BGCOLOR="#a5d8ff">5</TD><TD>6</TD></TR> </TABLE> >]; } subgraph cluster_AT { label = "转置矩阵 A^T (3x2)"; style=dashed; at [label=< <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> <TR><TD BGCOLOR="#a5d8ff">1</TD><TD>4</TD></TR> <TR><TD>2</TD><TD BGCOLOR="#a5d8ff">5</TD></TR> <TR><TD>3</TD><TD>6</TD></TR> </TABLE> >]; } a -> at [style=invis]; { rank=same; a; at; } }主对角线元素(1和5)在转置过程中保持不变。其他元素则沿着这条对角线进行反射。矩阵转置的性质转置具有一些有用的代数性质,值得了解。对于任意矩阵 $A$ 和 $B$(具有兼容的形状)以及任意标量 $c$:两次转置返回原矩阵: $(A^T)^T = A$。这很直观;如果你翻转矩阵,然后再翻转回来,就会回到起点。和的转置等于转置的和: $(A + B)^T = A^T + B^T$。乘积的转置会颠倒顺序: $(AB)^T = B^T A^T$。这一个不那么明显,但非常重要。当你对矩阵乘积进行转置时,也必须颠倒它们的乘法顺序。为什么转置操作有用?你可能会想,我们为什么需要这个操作。转置不仅仅是数学上的奇趣;它是重塑数据和实现计算的核心工具。它的主要用途之一是使矩阵维度兼容以进行乘法。例如,两个列向量 $u$ 和 $v$ 之间的点积无法通过标准矩阵乘法计算,因为它们的形状(例如 $3 \times 1$ 和 $3 \times 1$)不兼容。然而,通过转置第一个向量,你可以将点积重写为矩阵乘法:$$\nu^T v = \begin{bmatrix} u_1 & u_2 & u_3 \end{bmatrix} \begin{bmatrix} v_1 \ v_2 \ v_3 \end{bmatrix} = u_1 v_1 + u_2 v_2 + u_3 v_3 $$这个表达式中,一个 $1 \times 3$ 矩阵乘以一个 $3 \times 1$ 矩阵,这是有效且会产生一个 $1 \times 1$ 的标量结果,这正是点积的定义。这种技术在机器学习中随处可见,尤其是在线性回归和神经网络的方程中。在NumPy中转置矩阵在 NumPy 中执行转置操作非常简单。NumPy 数组有一个 .T 属性,它返回矩阵的转置版本。你不需要特殊的函数;只需访问这个属性即可。下面是如何在 Python 中创建一个矩阵及其转置:import numpy as np # 创建一个 2x4 矩阵 (2 行, 4 列) A = np.array([ [10, 20, 30, 40], [50, 60, 70, 80] ]) print("原始矩阵 A:") print(A) print("A 的形状:", A.shape) # 使用 .T 属性获取转置 A_transpose = A.T print("\n转置矩阵 A.T:") print(A_transpose) print("A.T 的形状:", A_transpose.shape)输出:原始矩阵 A: [[10 20 30 40] [50 60 70 80]] A 的形状: (2, 4) 转置矩阵 A.T: [[10 50] [20 60] [30 70] [40 80]] A.T 的形状: (4, 2)代码证实了转置操作将数组的形状从 (2, 4) 翻转为 (4, 2)。这个简单的 .T 属性是你为机器学习模型准备数据时会经常使用的。它是一个基本工具,用于在将矩阵输入算法之前,正确地重塑和对齐矩阵。