JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

矩阵与向量的乘法

矩阵乘向量并不神秘:它把矩阵的各列混合起来。矩阵乘矩阵的意思是「先做一个变换,再做另一个」。一路上我们会遇到那条让每个初学者吃惊的规则——顺序很重要,A*B 不等于 B*A——以及那个什么都不做的矩阵。

矩阵乘向量:混合各列

下面这幅图能让一切豁然开朗。要算 A 乘 向量 x,就把 x 里的数字当作权重,用每个权重去乘 A 的对应列,再把结果加起来。输出就是 A 各列的一个混合。

[[2,0],[0,3]] * (1,1)
  = 1*(2,0) + 1*(0,3)
  = (2,0) + (0,3)
  = (2,3)
x = (1,1) 给第一列权重 1、第二列权重 1,再相加。

矩阵乘矩阵 = 先做一个,再做另一个

矩阵乘矩阵 不过是把这个想法重复一遍。把两个矩阵都读成机器,乘积 A*B 的意思是:先让向量穿过 B,再穿过 A。这种串联叫做 复合。所以 A*B 作用在 x 上,等于 A 作用在(B 作用在 x 上的结果)上。

  1. 从右往左读 A*B:B 先发生,A 后发生。
  2. 乘积的第 j 列,就是 A 作用在 B 的第 j 列上的结果。
  3. 把这些输出列并肩排好——那就是乘积矩阵。

形状必须对得上,而且顺序很重要

只有当 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
单位矩阵把向量原样还给你。