矩阵乘向量:混合各列
下面这幅图能让一切豁然开朗。要算 A 乘 向量 x,就把 x 里的数字当作权重,用每个权重去乘 A 的对应列,再把结果加起来。输出就是 A 各列的一个混合。
[[2,0],[0,3]] * (1,1) = 1*(2,0) + 1*(0,3) = (2,0) + (0,3) = (2,3)
矩阵乘矩阵 = 先做一个,再做另一个
矩阵乘矩阵 不过是把这个想法重复一遍。把两个矩阵都读成机器,乘积 A*B 的意思是:先让向量穿过 B,再穿过 A。这种串联叫做 复合。所以 A*B 作用在 x 上,等于 A 作用在(B 作用在 x 上的结果)上。
- 从右往左读 A*B:B 先发生,A 后发生。
- 乘积的第 j 列,就是 A 作用在 B 的第 j 列上的结果。
- 把这些输出列并肩排好——那就是乘积矩阵。
形状必须对得上,而且顺序很重要
只有当 A 的列数等于 B 的行数时,才能算 A*B:(m 乘 n)乘(n 乘 p)得到(m 乘 p)。中间那两个数字必须相等,然后被「约掉」。如果它们不相等,乘积根本就不存在。
A=[[0,-1],[1,0]] (rotate) B=[[2,0],[0,1]] (stretch) A*B = [[0,-1],[2, 0]] B*A = [[0,-2],[1, 0]] <- different!
什么都不做的矩阵
单位矩阵 I 在对角线上全是 1,其余全是 0。乘上它,向量或矩阵都原封不动:I*x = x,A*I = A。它就是矩阵世界里的1——那台什么都不做的机器。
[[1,0],[0,1]] * (5,7) = (5,7) <- unchanged