矩阵的乘法 小象实战讲义 · 人工智能数学基础
在上一节学习了矩阵的加法和数乘后,我们掌握了矩阵线性运算的基础。然而,在人工智能领域,尤其是处理多层神经网络、主成分分析(PCA)等任务时,矩阵之间更核心的运算是乘法 。本节将系统性地定义矩阵乘法,并深入探讨其一系列关键性质。掌握矩阵乘法是理解线性变换、求解线性方程组以及后续学习特征值与奇异值分解的基石。
💡 核心导读 本节你将学到:
矩阵乘法的定义与计算规则 :理解“行乘列”的核心思想,并能熟练计算任意两个可乘矩阵的乘积。矩阵乘法的核心性质 :包括结合律、分配律、与单位矩阵的关系,以及不满足交换律 这一关键特性。矩阵乘法的转置规则 :掌握 ( A B ) T = B T A T (AB)^T = B^T A^T ( A B ) T = B T A T 这一重要公式及其证明思路。分块矩阵的乘法 :学习一种高效的矩阵运算技巧,为处理大规模矩阵计算打下基础。矩阵乘法的定义 设矩阵 A A A 是一个 s × n s \times n s × n 的矩阵,矩阵 B B B 是一个 n × m n \times m n × m 的矩阵,即 A A A 的列数等于 B B B 的行数。
定义矩阵 A A A 与 B B B 的乘积 C = A B C = AB C = A B 为一个 s × m s \times m s × m 的矩阵,其第 i i i 行第 j j j 列的元素 c i j c_{ij} c ij 由下式给出: c i j = ∑ k = 1 n a i k b k j , i = 1 , … , s ; j = 1 , … , m . c_{ij} = \sum_{k=1}^{n} a_{ik} b_{kj}, \quad i = 1, \dots, s; \quad j = 1, \dots, m. c ij = k = 1 ∑ n a ik b k j , i = 1 , … , s ; j = 1 , … , m .
定义解读与注意事项 :
可乘性前提 :两个矩阵 A A A 和 B B B 能够相乘的充要条件 是左边矩阵 A A A 的列数 必须等于右边矩阵 B B B 的行数 。记 A A A 为 s × n s \times n s × n ,B B B 为 n × m n \times m n × m ,则 A B AB A B 有意义。乘积矩阵的维度 :若 A A A 是 s × n s \times n s × n ,B B B 是 n × m n \times m n × m ,则乘积 C = A B C = AB C = A B 是一个 s × m s \times m s × m 的矩阵。可以形象地记为:( s × n ) ⋅ ( n × m ) → ( s × m ) (s \times n) \cdot (n \times m) \rightarrow (s \times m) ( s × n ) ⋅ ( n × m ) → ( s × m ) ,中间的 n n n “相消”。“行乘列”的本质 :元素 c i j c_{ij} c ij 是 A A A 的第 i i i 行行向量与 B B B 的第 j j j 列列向量的内积(点积) 。这一定义是向量内积运算在矩阵层面的自然推广。顺序至关重要 :矩阵乘法不满足交换律(后文详述),因此 A A A 乘以 B B B 必须写作 A B AB A B ,顺序不能随意调换。示例 :计算 A = [ 1 − 2 0 3 − 1 2 ] A = \begin{bmatrix} 1 & -2 \ 0 & 3 \ -1 & 2 \end{bmatrix} A = 1 0 − 1 − 2 3 2 与 B = [ 4 5 6 7 ] B = \begin{bmatrix} 4 & 5 \ 6 & 7 \end{bmatrix} B = [ 4 6 5 7 ] 的乘积 A B AB A B 。
解 :A A A 是 3 × 2 3 \times 2 3 × 2 ,B B B 是 2 × 2 2 \times 2 2 × 2 ,满足可乘条件,结果应为 3 × 2 3 \times 2 3 × 2 矩阵。 A B = [ 1 − 2 0 3 − 1 2 ] [ 4 5 6 7 ] = [ 1 × 4 + ( − 2 ) × 6 1 × 5 + ( − 2 ) × 7 0 × 4 + 3 × 6 0 × 5 + 3 × 7 ( − 1 ) × 4 + 2 × 6 ( − 1 ) × 5 + 2 × 7 ] = [ 4 − 12 5 − 14 0 + 18 0 + 21 − 4 + 12 − 5 + 14 ] = [ − 8 − 9 18 21 8 9 ] . \begin{aligned} AB &= \begin{bmatrix} 1 & -2 \ 0 & 3 \ -1 & 2 \end{bmatrix} \begin{bmatrix} 4 & 5 \ 6 & 7 \end{bmatrix} \ &= \begin{bmatrix} 1\times4 + (-2)\times6 & 1\times5 + (-2)\times7 \ 0\times4 + 3\times6 & 0\times5 + 3\times7 \ (-1)\times4 + 2\times6 & (-1)\times5 + 2\times7 \end{bmatrix} \ &= \begin{bmatrix} 4-12 & 5-14 \ 0+18 & 0+21 \ -4+12 & -5+14 \end{bmatrix} = \begin{bmatrix} -8 & -9 \ 18 & 21 \ 8 & 9 \end{bmatrix}. \end{aligned} A B = 1 0 − 1 − 2 3 2 [ 4 6 5 7 ] = 1 × 4 + ( − 2 ) × 6 0 × 4 + 3 × 6 ( − 1 ) × 4 + 2 × 6 1 × 5 + ( − 2 ) × 7 0 × 5 + 3 × 7 ( − 1 ) × 5 + 2 × 7 = 4 − 12 0 + 18 − 4 + 12 5 − 14 0 + 21 − 5 + 14 = − 8 18 8 − 9 21 9 .
矩阵乘法的基本性质 矩阵乘法具有一系列重要的代数性质,其中一些与数的乘法相似,但也有一些根本性的不同。
性质 1:乘法结合律 对于可乘的矩阵 A A A (s × n s \times n s × n ), B B B (n × m n \times m n × m ), C C C (m × r m \times r m × r ),有: ( A B ) C = A ( B C ) . (AB)C = A(BC). ( A B ) C = A ( B C ) . 这意味着在矩阵连乘时,只要乘法的顺序(从左到右)不变,我们可以任意选择先计算哪两个矩阵的乘积。这为矩阵运算和算法设计带来了极大的便利。
证明思路 :比较 ( A B ) C (AB)C ( A B ) C 和 A ( B C ) A(BC) A ( B C ) 的 ( i , j ) (i, j) ( i , j ) 元。两者最终都等于 ∑ k = 1 n ∑ l = 1 m a i k b k l c l j \sum_{k=1}^{n} \sum_{l=1}^{m} a_{ik} b_{kl} c_{lj} ∑ k = 1 n ∑ l = 1 m a ik b k l c l j ,只是求和顺序不同,根据双重求和的可交换性,结果相等。
性质 2:乘法对加法的分配律 矩阵乘法对矩阵加法满足左分配律 和右分配律 。
左分配律 :A ( B + C ) = A B + A C A(B + C) = AB + AC A ( B + C ) = A B + A C (要求 B , C B, C B , C 的列数相同,且 A A A 的列数等于 B , C B, C B , C 的行数)。右分配律 :( B + C ) A = B A + C A (B + C)A = BA + CA ( B + C ) A = B A + C A (要求 B , C B, C B , C 的行数相同,且 B , C B, C B , C 的列数等于 A A A 的行数)。注意 :分配时,矩阵 A A A 的位置(左乘或右乘)必须保持不变。
性质 3:单位矩阵是乘法单位元 n n n 阶单位矩阵 I n I_n I n (或简记为 I I I )是一个主对角线上元素全为 1 1 1 ,其余元素全为 0 0 0 的方阵。 I n = [ 1 0 ⋯ 0 0 1 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 1 ] . I_n = \begin{bmatrix} 1 & 0 & \cdots & 0 \ 0 & 1 & \cdots & 0 \ \vdots & \vdots & \ddots & \vdots \ 0 & 0 & \cdots & 1 \end{bmatrix}. I n = 1 0 ⋮ 0 0 1 ⋮ 0 ⋯ ⋯ ⋱ ⋯ 0 0 ⋮ 1 . 对于任意 s × n s \times n s × n 矩阵 A A A 和 n × m n \times m n × m 矩阵 B B B ,有: I s A = A , A I n = A . I_s A = A, \quad A I_n = A. I s A = A , A I n = A . 特别地,对于 n n n 阶方阵 A A A ,有 I n A = A I n = A I_n A = A I_n = A I n A = A I n = A 。因此,单位矩阵 I n I_n I n 在 n n n 阶方阵的乘法运算中扮演着“1 1 1 ”的角色。
性质 4:数乘与矩阵乘法的相容性 设 k k k 是一个数(标量),A A A , B B B 为可乘矩阵,则: k ( A B ) = ( k A ) B = A ( k B ) . k(AB) = (kA)B = A(kB). k ( A B ) = ( k A ) B = A ( k B ) . 这意味着标量乘法可以自由地“穿过”矩阵乘法。
性质 5:矩阵乘法不满足交换律 这是矩阵乘法与数的乘法最显著的区别。一般地,A B ≠ B A AB \neq BA A B = B A 。
维度不匹配 :即使 A B AB A B 有定义,B A BA B A 也可能因维度不匹配而无法计算。例如,若 A A A 是 2 × 3 2 \times 3 2 × 3 ,B B B 是 3 × 4 3 \times 4 3 × 4 ,则 A B AB A B 是 2 × 4 2 \times 4 2 × 4 ,但 B A BA B A 无定义。结果不相等 :即使 A A A 和 B B B 都是 n n n 阶方阵,A B AB A B 和 B A BA B A 也未必相等。示例 : 令 A = [ 1 1 1 ] 1 × 3 A = \begin{bmatrix} 1 & 1 & 1 \end{bmatrix} {1 \times 3} A = [ 1 1 1 ] 1 × 3 , B = [ 1 1 1 ] 3 × 1 B = \begin{bmatrix} 1 \ 1 \ 1 \end{bmatrix} {3 \times 1}B = 1 1 1 3 × 1 。 则 A B = [ 3 ] 1 × 1 AB = \begin{bmatrix} 3 \end{bmatrix} {1 \times 1} A B = [ 3 ] 1 × 1 ,而 B A = [ 1 1 1 1 1 1 1 1 1 ] 3 × 3 BA = \begin{bmatrix} 1 & 1 & 1 \ 1 & 1 & 1 \ 1 & 1 & 1 \end{bmatrix} {3 \times 3}B A = 1 1 1 1 1 1 1 1 1 3 × 3 。显然 A B ≠ B A AB \neq BA A B = B A 。
定义 :如果两个矩阵 A A A 和 B B B 满足 A B = B A AB = BA A B = B A ,则称 A A A 和 B B B 是可交换 的。可交换是一种特殊且重要的关系。例如,数量矩阵 k I kI k I (即 k k k 乘以单位矩阵)与任何同阶方阵都是可交换的。
性质 6:零因子存在性 对于实数,若 a b = 0 ab=0 ab = 0 ,则必有 a = 0 a=0 a = 0 或 b = 0 b=0 b = 0 。但对于矩阵,两个非零矩阵的乘积可能是零矩阵 。 示例 : A = [ 0 0 1 0 ] , B = [ 0 0 0 1 ] , 则 B A = [ 0 0 0 1 ] [ 0 0 1 0 ] = [ 0 0 0 0 ] . A = \begin{bmatrix} 0 & 0 \ 1 & 0 \end{bmatrix}, \quad B = \begin{bmatrix} 0 & 0 \ 0 & 1 \end{bmatrix}, \quad 则 BA = \begin{bmatrix} 0 & 0 \ 0 & 1 \end{bmatrix} \begin{bmatrix} 0 & 0 \ 1 & 0 \end{bmatrix} = \begin{bmatrix} 0 & 0 \ 0 & 0 \end{bmatrix}. A = [ 0 1 0 0 ] , B = [ 0 0 0 1 ] , 则 B A = [ 0 0 0 1 ] [ 0 1 0 0 ] = [ 0 0 0 0 ] . 这里 A ≠ 0 A \neq 0 A = 0 , B ≠ 0 B \neq 0 B = 0 ,但 B A = 0 BA = 0 B A = 0 。这使得矩阵代数比实数代数更为复杂。
性质 7:转置运算的性质 矩阵的转置运算与加法、数乘和乘法有如下关系:
( A + B ) T = A T + B T (A + B)^T = A^T + B^T ( A + B ) T = A T + B T 。( k A ) T = k A T (kA)^T = k A^T ( k A ) T = k A T 。最重要的 :( A B ) T = B T A T (AB)^T = B^T A^T ( A B ) T = B T A T 。注意 :乘积的转置等于转置矩阵反向相乘 。这一性质可以推广到多个矩阵:( A B C ) T = C T B T A T (ABC)^T = C^T B^T A^T ( A B C ) T = C T B T A T 。
证明 ( A B ) T = B T A T (AB)^T = B^T A^T ( A B ) T = B T A T 的思路 : 设 A A A 是 s × n s \times n s × n ,B B B 是 n × m n \times m n × m 。比较等式两边的 ( i , j ) (i, j) ( i , j ) 元。
( A B ) T (AB)^T ( A B ) T 的 ( i , j ) (i, j) ( i , j ) 元等于 A B AB A B 的 ( j , i ) (j, i) ( j , i ) 元,即 ∑ k = 1 n a j k b k i \sum_{k=1}^{n} a_{jk} b_{ki} ∑ k = 1 n a j k b k i 。B T A T B^T A^T B T A T 的 ( i , j ) (i, j) ( i , j ) 元等于 B T B^T B T 的第 i i i 行(即 B B B 的第 i i i 列)与 A T A^T A T 的第 j j j 列(即 A A A 的第 j j j 行)的内积,即 ∑ k = 1 n ( B T ) i k ( A T ) k j = ∑ k = 1 n b k i a j k \sum_{k=1}^{n} (B^T) {ik} (A^T) {kj} = \sum_{k=1}^{n} b_{ki} a_{jk}∑ k = 1 n ( B T ) ik ( A T ) k j = ∑ k = 1 n b k i a j k 。 由于求和顺序可交换,两者相等。又因为矩阵维度相同,故等式成立。分块矩阵的乘法 分块矩阵是处理大型矩阵运算的强大工具。其核心思想是将大矩阵划分为若干个小块(子矩阵),然后像处理“数”一样,按照矩阵乘法的规则对这些子矩阵进行运算。
分块乘法规则 : 设矩阵 A A A (s × n s \times n s × n ) 和 B B B (n × m n \times m n × m ) 被分块如下: A = [ A 11 A 12 ⋯ A 1 t A 21 A 22 ⋯ A 2 t ⋮ ⋮ ⋱ ⋮ A r 1 A r 2 ⋯ A r t ] , B = [ B 11 B 12 ⋯ B 1 p B 21 B 22 ⋯ B 2 p ⋮ ⋮ ⋱ ⋮ B t 1 B t 2 ⋯ B t p ] . A = \begin{bmatrix} A_{11} & A_{12} & \cdots & A_{1t} \ A_{21} & A_{22} & \cdots & A_{2t} \ \vdots & \vdots & \ddots & \vdots \ A_{r1} & A_{r2} & \cdots & A_{rt} \end{bmatrix}, \quad B = \begin{bmatrix} B_{11} & B_{12} & \cdots & B_{1p} \ B_{21} & B_{22} & \cdots & B_{2p} \ \vdots & \vdots & \ddots & \vdots \ B_{t1} & B_{t2} & \cdots & B_{tp} \end{bmatrix}. A = A 11 A 21 ⋮ A r 1 A 12 A 22 ⋮ A r 2 ⋯ ⋯ ⋱ ⋯ A 1 t A 2 t ⋮ A r t , B = B 11 B 21 ⋮ B t 1 B 12 B 22 ⋮ B t 2 ⋯ ⋯ ⋱ ⋯ B 1 p B 2 p ⋮ B tp . 其中,A A A 的列分块方式与 B B B 的行分块方式必须完全一致,即 A i k A_{ik} A ik 的列数等于 B k j B_{kj} B k j 的行数(对所有 i , j , k i, j, k i , j , k )。则 A A A 与 B B B 的乘积 C = A B C = AB C = A B 可以分块计算: C i j = ∑ k = 1 t A i k B k j , i = 1 , … , r ; j = 1 , … , p . C_{ij} = \sum_{k=1}^{t} A_{ik} B_{kj}, \quad i=1,\dots,r; \ j=1,\dots,p. C ij = k = 1 ∑ t A ik B k j , i = 1 , … , r ; j = 1 , … , p . 这里 C i j C_{ij} C ij 是乘积矩阵 C C C 对应的子块。
关键要求 :
外维匹配 :左边矩阵 A A A 的列组数 等于右边矩阵 B B B 的行组数 (上例中均为 t t t )。内维匹配 :A A A 中每个子块 A i k A_{ik} A ik 的列数 必须等于 B B B 中对应子块 B k j B_{kj} B k j 的行数 。这保证了每一个子矩阵乘法 A i k B k j A_{ik}B_{kj} A ik B k j 都是合法的。特殊且常用的分块技巧:列分块 将右乘矩阵 B B B 按列分块:B = [ β 1 , β 2 , … , β m ] B = [\boldsymbol{\beta}_1, \boldsymbol{\beta}_2, \dots, \boldsymbol{\beta}_m] B = [ β 1 , β 2 , … , β m ] ,其中 β j \boldsymbol{\beta}_j β j 是 B B B 的第 j j j 列(视为 n × 1 n \times 1 n × 1 矩阵)。则乘积 A B AB A B 可以简洁地表示为: A B = A [ β 1 , β 2 , … , β m ] = [ A β 1 , A β 2 , … , A β m ] . AB = A[\boldsymbol{\beta}_1, \boldsymbol{\beta}_2, \dots, \boldsymbol{\beta}_m] = [A\boldsymbol{\beta}_1, A\boldsymbol{\beta}_2, \dots, A\boldsymbol{\beta}_m]. A B = A [ β 1 , β 2 , … , β m ] = [ A β 1 , A β 2 , … , A β m ] . 这意味着矩阵 A A A 左乘 B B B 等价于 A A A 分别左乘 B B B 的每一列。这个视角在理解线性变换 x ↦ A x x \mapsto Ax x ↦ A x 时非常直观。
📝 动手练一练 计算与验证 :已知矩阵 P = [ 2 − 1 0 1 ] P = \begin{bmatrix} 2 & -1 \ 0 & 1 \end{bmatrix} P = [ 2 0 − 1 1 ] , Q = [ 1 2 3 4 ] Q = \begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix} Q = [ 1 3 2 4 ] , R = [ 0 1 − 1 0 ] R = \begin{bmatrix} 0 & 1 \ -1 & 0 \end{bmatrix} R = [ 0 − 1 1 0 ] 。 a) 计算 P Q PQ P Q 和 Q P QP QP ,并验证 P Q ≠ Q P PQ \neq QP P Q = QP 。 b) 计算 ( P Q ) R (PQ)R ( P Q ) R 和 P ( Q R ) P(QR) P ( QR ) ,验证结合律。 c) 计算 ( P Q ) T (PQ)^T ( P Q ) T 和 Q T P T Q^T P^T Q T P T ,验证转置性质。
分块矩阵计算 :将矩阵 A = [ 1 0 2 3 0 1 4 5 − 1 2 0 1 ] A = \begin{bmatrix} 1 & 0 & 2 & 3 \ 0 & 1 & 4 & 5 \ -1 & 2 & 0 & 1 \end{bmatrix} A = 1 0 − 1 0 1 2 2 4 0 3 5 1 和 B = [ 1 2 3 4 5 6 7 8 ] B = \begin{bmatrix} 1 & 2 \ 3 & 4 \ 5 & 6 \ 7 & 8 \end{bmatrix} B = 1 3 5 7 2 4 6 8 进行如下分块: A = [ I 2 A 12 A 21 A 22 ] , B = [ B 11 B 21 ] , A = \begin{bmatrix} I_2 & A_{12} \ A_{21} & A_{22} \end{bmatrix}, \quad B = \begin{bmatrix} B_{11} \ B_{21} \end{bmatrix}, A = [ I 2 A 21 A 12 A 22 ] , B = [ B 11 B 21 ] , 其中 I 2 I_2 I 2 是 2 × 2 2 \times 2 2 × 2 单位矩阵。请利用分块乘法计算 A B AB A B ,并与直接计算 A B AB A B 的结果进行对比。
参考答案 :
a) P Q = [ − 1 0 3 4 ] PQ = \begin{bmatrix} -1 & 0 \ 3 & 4 \end{bmatrix} P Q = [ − 1 3 0 4 ] , Q P = [ 2 1 6 1 ] QP = \begin{bmatrix} 2 & 1 \ 6 & 1 \end{bmatrix} QP = [ 2 6 1 1 ] ,不相等。 b) ( P Q ) R = [ 0 − 1 − 4 3 ] (PQ)R = \begin{bmatrix} 0 & -1 \ -4 & 3 \end{bmatrix} ( P Q ) R = [ 0 − 4 − 1 3 ] , P ( Q R ) = [ 0 − 1 − 4 3 ] P(QR) = \begin{bmatrix} 0 & -1 \ -4 & 3 \end{bmatrix} P ( QR ) = [ 0 − 4 − 1 3 ] ,相等。 c) ( P Q ) T = [ − 1 3 0 4 ] (PQ)^T = \begin{bmatrix} -1 & 3 \ 0 & 4 \end{bmatrix} ( P Q ) T = [ − 1 0 3 4 ] , Q T P T = [ 1 3 2 4 ] [ 2 0 − 1 1 ] = [ − 1 3 0 4 ] Q^T P^T = \begin{bmatrix} 1 & 3 \ 2 & 4 \end{bmatrix} \begin{bmatrix} 2 & 0 \ -1 & 1 \end{bmatrix} = \begin{bmatrix} -1 & 3 \ 0 & 4 \end{bmatrix} Q T P T = [ 1 2 3 4 ] [ 2 − 1 0 1 ] = [ − 1 0 3 4 ] ,相等。 分块后,A 12 = [ 2 3 4 5 ] A_{12} = \begin{bmatrix} 2 & 3 \ 4 & 5 \end{bmatrix} A 12 = [ 2 4 3 5 ] , A 21 = [ − 1 2 ] A_{21} = \begin{bmatrix} -1 & 2 \end{bmatrix} A 21 = [ − 1 2 ] , A 22 = [ 0 1 ] A_{22} = \begin{bmatrix} 0 & 1 \end{bmatrix} A 22 = [ 0 1 ] , B 11 = [ 1 2 3 4 ] B_{11} = \begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix} B 11 = [ 1 3 2 4 ] , B 21 = [ 5 6 7 8 ] B_{21} = \begin{bmatrix} 5 & 6 \ 7 & 8 \end{bmatrix} B 21 = [ 5 7 6 8 ] 。 则 A B = [ I 2 B 11 + A 12 B 21 A 21 B 11 + A 22 B 21 ] = [ [ 1 2 3 4 ] + [ 31 36 55 64 ] [ 5 6 ] + [ 7 8 ] ] = [ 32 38 58 68 12 14 ] AB = \begin{bmatrix} I_2 B_{11} + A_{12} B_{21} \ A_{21} B_{11} + A_{22} B_{21} \end{bmatrix} = \begin{bmatrix} \begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix} + \begin{bmatrix} 31 & 36 \ 55 & 64 \end{bmatrix} \ \begin{bmatrix} 5 & 6 \end{bmatrix} + \begin{bmatrix} 7 & 8 \end{bmatrix} \end{bmatrix} = \begin{bmatrix} 32 & 38 \ 58 & 68 \ 12 & 14 \end{bmatrix} A B = [ I 2 B 11 + A 12 B 21 A 21 B 11 + A 22 B 21 ] = [ 1 3 2 4 ] + [ 31 55 36 64 ] [ 5 6 ] + [ 7 8 ] = 32 58 12 38 68 14 。 直接计算 A B AB A B 可得相同结果。 import numpy as np
# 练习1的代码验证
P = np.array([[ 2 , - 1 ], [ 0 , 1 ]])
Q = np.array([[ 1 , 2 ], [ 3 , 4 ]])
R = np.array([[ 0 , 1 ], [ - 1 , 0 ]])
print ( "1. a) 验证交换律不成立:" )
PQ = P @ Q
QP = Q @ P
print ( f "PQ = \n{PQ} " )
print ( f "QP = \n{QP} " )
print ( f "PQ == QP? { np.array_equal( PQ , QP ) } " )
print ( " \n 1. b) 验证结合律:" )
P_QR = P @ (Q @ R)
PQ_R = (P @ Q) @ R
print ( f "P(QR) = \n{P_QR} " )
print ( f "(PQ)R = \n{PQ_R} " )
print ( f "P(QR) == (PQ)R? { np.array_equal( P_QR , PQ_R ) } " )
print ( " \n 1. c) 验证转置性质:" )
PQ_T = (P @ Q).T
QT_PT = Q.T @ P.T
print ( f "(PQ)^T = \n{PQ_T} " )
print ( f "Q^T P^T = \n{QT_PT} " )
print ( f "(PQ)^T == Q^T P^T? { np.array_equal( PQ_T , QT_PT ) } " )
# 练习2的代码验证:分块矩阵乘法 vs 直接乘法
print ( " \n " + "=" * 50 )
print ( "2. 分块矩阵乘法验证:" )
A = np.array([[ 1 , 0 , 2 , 3 ],
[ 0 , 1 , 4 , 5 ],
[ - 1 , 2 , 0 , 1 ]])
B = np.array([[ 1 , 2 ],
[ 3 , 4 ],
[ 5 , 6 ],
[ 7 , 8 ]])
# 直接计算
AB_direct = A @ B
print ( f "直接计算 AB = \n{AB_direct} " )
# 分块计算
I2 = np.eye( 2 )
A12 = np.array([[ 2 , 3 ], [ 4 , 5 ]])
A21 = np.array([[ - 1 , 2 ]])
A22 = np.array([[ 0 , 1 ]])
B11 = np.array([[ 1 , 2 ], [ 3 , 4 ]])
B21 = np.array([[ 5 , 6 ], [ 7 , 8 ]])
# 按照分块公式计算
AB_block_top = I2 @ B11 + A12 @ B21
AB_block_bottom = A21 @ B11 + A22 @ B21
AB_block = np.vstack(( AB_block_top , AB_block_bottom ))
print ( f "分块计算 AB = \n{AB_block} " )
print ( f "两种方法结果一致? { np.array_equal( AB_direct , AB_block ) } " ) 本章小结 本节深入探讨了线性代数的核心运算——矩阵乘法。
定义与计算 :你掌握了矩阵乘法的“行乘列”定义,理解了可乘性的维度条件,并能熟练进行计算。核心性质 :你学习了矩阵乘法的结合律、分配律、与单位矩阵的关系,并深刻理解了其不满足交换律 的特性,认识了零因子和转置的重要规则 ( A B ) T = B T A T (AB)^T = B^T A^T ( A B ) T = B T A T 。高级技巧 :你初步了解了分块矩阵的乘法,这是一种化整为零、简化大规模计算的有效策略。行动清单 :
强化计算 :任意构造几个不同维度的矩阵,手动计算它们的乘积,并利用上方的 Python 代码进行验证,确保对“行乘列”规则烂熟于心。性质对比 :制作一个表格,对比矩阵乘法与实数乘法的异同(交换律、零因子、单位元等),加深对矩阵代数独特性的理解。视角应用 :尝试用“列分块”的视角重新理解一个矩阵乘法 A X AX A X ,将结果矩阵的每一列视为 A A A 对 X X X 对应列的线性变换。这为下一章理解线性变换打下直观基础。— 小象教研组