矩阵结合律的证明视频-矩阵结合律证明视频
矩阵乘法的秘密:为啥顺序不能乱换? 想象一下你在画一张大地图。地图本身被分割成了几个大的区域,每个区域又被再细分为几个小块。
要是你只负责画某个特定区域的小地图,那彻底没难题。但要是你需求把 A 区域的小图拼接到 B 区域的小图上,再把 C 区域的小图塞进去,这时候性质就变了。 矩阵乘法本质上不是一种“加法”,而是一种信息的“拼接”。当你把一个矩阵乘以另一个矩阵时,你实际上是在做一件事:把第一步矩阵里的每一行,和第二步矩阵里的每一列互相“打架”,然后算出结局。 好的,先看看最好办的情况。假设我们有两个矩阵:A 和 B。A 是 3 行 4 列的,B 是 4 行 2 列的。当你计算 C = A × B 时,你会发现 A 的第 i 行,和 B 的第 i 列,它们形成了一场“乘法之舞”。对于每一个位置 (i, j),你取 A 的第 i 行里的数,乘以 B 第 i 列里对应的数,最终加起来。
这就好比你是拿着 A 的第 i 行这张牌,去和 B 的第 i 列这张牌叠在一起算分。
这时候的结局,第 j 列就是 C 的第 j 列。 目前,我们试着换个玩法。
要是我们先算 A × C,再乘 B 呢?这时候我们要用的数组索引变成了 (A, C) 和第 (B, A)。
这就像是我们拿 A 的第 i 行,先和 C 的第 i 列叠在一起算分,拿到了一个新的矩阵,然后再拿来和 B 的第 i 列叠分。别看动作多了,但核心逻辑没乱。 实际上,矩阵乘法换行换列,只要两边矩阵的“维度”匹配,结局一辈子是一样的。
这就像是你去超市买东西。你有三个袋(矩阵 A),每个袋子里装了不同种类的东西。
要是你先装满袋 1 和袋 2,再拿结局和袋 3 混合;要么先装满袋 2 和袋 3,再拿结局和袋 1 混合,只要袋 1、2、3 都装的是同一类商品,你最终拿到的总金额(结局)就不会变。 特别是当矩阵都是方阵,要么行和列数量彻底对得上时,这种“换律”就完美显现了。设 C = A × B = B × A。
这时候你能够把 A 的第 i 行看作一条指令,告诉 B 的哪一列该如何做。 有没有啥例外?自然有。假设 A 是 3 行 4 列,B 是 4 行 5 列,C 是 3 行 5 列。
这时候先算 A × B,结局 C 就是 3 行 5 列。但要是 B 是 4 行 3 列,那 A 和 B 就“撞车”了,没法直接乘。
这时候你只能先算 A × C,结局变成 3 行 3 列,然后再用这个结局乘以 B,这样才是合法的运算。 这也是为啥大量初学者好办犯的毛病。他们看到 A 乘 B,却想自然地认定 A 和 B 应当转置一下才能乘回去。
实际上,矩阵乘法遵循的是“行 x 列”的规则,而不是“数对”的规则。当你把 A 转置成 A^T 再乘 B 时,你就转变了数据的排列方式,算出的矩阵和原来 C 不一样。 再来看个具体的例子。假设 A 是一个 2x3 的矩阵,行是 [1, 2, 3],列是 [4, 5, 6]。B 是 3x2 的,行是 [7, 8, 9],列是 [10, 11]。
要是我们先算 C = A × B,那么 C 就是 2x2 的。计算过程是:C 的第一行是第一行 A 和第一列 B 的乘积,即 [1×7 + 2×8 + 3×9, 1×10 + 2×11 + 3×11],也就是 [31, 53]。 那要是我们先算 B × A 呢?B 有 3 行,A 只有 2 列,这行不通。但要是我们算 A × (B × B^T) 要么别的组合,结构就不同了。
不过,这里有个细节,要是 A 是 2x2 的,B 是 2x2 的,那么确实有 (A-B)(B-A) = B-A - BA + AB - BA = B - 2BA + 2AB + BA... 这种展开是废话,我们看核心局部。 在 A = [[1, 2], [3, 4]] 和 B = [[5, 6], [7, 8]] 的情况下,直接计算 AB 拿到 [[15+27, 16+28], [35+47, 36+48]] = [[19, 22], [43, 50]]。 而计算 BA 拿到 [[51+63, 52+64], [71+83, 72+84]] = [[23, 30], [29, 46]]。 你看,这两组数据彻底不一样。
这说明 A 和 B 的位置根本不能随意互换。
这是“结合律”失效的典型场景,也是大量人困惑的缘由。矩阵乘法之故此不能像一般/平平加法那样随意换顺序,是出于它涉及到了“行”和“列”这两个独立的概念。A 的第 i 行是 A 的身份证,B 的第 j 列是 B 的身份证,但 A 的第 i 行去和 B 的第 j 列结合,跟 A 的第 j 行去和 B 的第 i 列结合,形成的“化学反应”是彻底不同的。 这就好比你在做加法。1+2 和 2+1 结局一样,出于加法是知足换律的。但矩阵乘法不是加法。
要是你把 A 的第 1 行和第 2 行直接换位置,别看数字没变,但从矩阵的角度看,它变成了另一张卡片。当你用它和 B 的第一列混合时,出于 A 的第 1 行是 [1, 2],和 B 的第一列 [4, 5, 6] 混合,拿到的是第一行和第三项的加权平均。而要是你的 A 的第 1 行实际上是原矩阵的第 2 行 [2, 4, 6],那混合结局就是第二行和第三项的加权平均。 这种“行”的变化,通过矩阵乘法就彻底体现出来了。
这就是为啥在计算机科学的底层原理里,人们要格外小心矩阵的顺序。 有时候,我们就连能够用这种“括号”来创造新的矩阵结构。
比如 (A+B)C 和 A(BC)。别看它们看起来形式一样,但计算过程彻底不同。取一个具体的 2x3 矩阵 A,2x2 矩阵 B,2x3 矩阵 C。A = [[0, 0, 0], [1, 0, 1]]。B = [[1, 0], [0, 1]]。C = [[1, 0, 0], [0, 1, 1]]。 先算 (A+B) 拿到 [[1, 0, 0], [1, 1, 1]]。再乘以 C,结局是 [[1, 0, 0], [1, 1, 2]]。 而先算 (BC) 拿到 [[1, 0, 0], [0, 1, 1]]。再乘以 A,结局是 [[0, 0, 0], [1, 1, 2]]。 这一对比贼刺眼。别看最终拿到的 C 矩阵是 [[0, 0, 0], [1, 1, 2]],可是 (A+B)C 拿到的结局矩阵第一行是 [1, 0, 0],而 A(BC) 拿到的结局矩阵第一行却是 [0, 0, 0]。
这说明,矩阵的“结合”并不是像搭积木那样随随意便就能换块的。每一块(矩阵)都有自己的属性(行和列),它们组合时,严格按照顺序拼接。 故此,回到最初的难题:矩阵乘法,严格来说,是不有结合律的。别看在日常编程里,我们常常为了撇脱,把换行换列的表达式当成一个整体,要么在特定语境下简化书写,但在数学的严谨世界里,矩阵的排列顺序就是命脉。 要是你打算写程序处理数据,千万不要搞混了。A 是第一行,B 是第二行,那绝不能写成先算 B 再算 A。矩阵乘法就像是一场精密的广播,信号源务必明确,接收端也务必明确。一旦发了错频的广播,接收到的信号就是废音。
这就是为啥我们在做机器学习、图像处理要么任何涉及数据变换的时候,务必时刻牢记矩阵的乘法规则,哪怕是在最基础的库函数调用里,也要保证顺序的整个性。 总而言之,矩阵乘法换行换列,只限于“能够乘”的那种情况。一旦维度不匹配,要么想强行换整体运算的顺序,结局就会崩塌。
这就是矩阵结合律的真相,也是它区别于一般/平平数学运算的最根本特征。
声明:演示网站所有内容,若无特殊说明或标注,均来源于网络转载,仅供学习交流使用,禁止商用。若本站侵犯了你的权益,可联系本站删除。
