矩阵乘法分为四种情况,本质是一样的,都是向量之间的运算。
- 向量乘向量(点积)
- 矩阵乘向量(右乘)
- 向量乘矩阵(左乘)
- 矩阵乘矩阵
向量乘向量(点积) #
一切要从点积开始。点积是两个向量之间的运算,结果是一个标量。理解为两个向量“合并”后可以走多远。单纯的模长乘积是不对的,因为向量带方向。为了共线,就要乘以夹角的余弦值。
$$ \begin{bmatrix} x_1 & y_1 \end{bmatrix} \begin{bmatrix} x_2 \\ y_2 \end{bmatrix} = x_1x_2 + y_1y_2 = |A||B|cos\theta $$更广泛的:
$$ a \cdot b = \sum_{i=1}^{n} a_ib_i = a_1b_1 + a_2b_2 + \cdots + a_nb_n $$矩阵乘向量(右乘) #
意义是矩阵(左)变换向量(右)。
$$ \begin{bmatrix} x_1 & y_1 \\ x_2 & y_2 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = x \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} + y \begin{bmatrix} y_1 \\ y_2 \end{bmatrix} = \begin{bmatrix} x_1x + y_1y \\ x_2x + y_2y \end{bmatrix} $$\(n \times p\) * \(p \times 1\) = \(n \times 1\)
向量里 \(p\) 行代表 \(p\) 维。矩阵里,列代表输入向量的维度,行代表输出向量的维度。所以矩阵列数必须等于向量的行数;而输出维度 \(n\) 可以随意。
$$ x_{\text{new}} = \\ \begin{bmatrix} x_1 & y_1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = x_1x + y_1y $$$$ y_{\text{new}} = \\ \begin{bmatrix} x_2 & y_2 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = x_2x + y_2y $$这里表示把输入的二维向量变换成二维空间里的另一个向量。 \([x_1, y_1]\) 告诉新分量 \(x_{\text{new}}\) 如何因两个维度而变化。\([x_2, y_2]\) 告诉新分量 \(y_{\text{new}}\) 如何因两个维度而变化。更高维度同理。计算方法是点积。
$$ Ax = \begin{bmatrix} x_{\text{new}} \\ y_{\text{new}} \end{bmatrix} $$降维 #
若矩阵只有一行,则输出空间是一维,无第二个分量 \(y\) 的变化指示。输入的二维向量变成了标量,空间由平面变成了线(只剩了长度)。
$$ \begin{bmatrix} x_1 & y_1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = x_1x + y_1y $$另一种降维是,输出空间依旧是二维,但第二个维度分量为 \(0\),则输入的二维向量被投影到二维空间中的一条线 - \(x\) 轴上。
$$ \begin{bmatrix} x_1 & y_1 \\ 0 & 0 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} x_1x + y_1y \\ 0 \end{bmatrix} $$升维 #
当然也可以升维,虽然向量不提供第三维度的信息,但第三维度的新信息来自前两个维度加权后的合。
$$ \begin{bmatrix} x_1 & y_1 \\ x_2 & y_2 \\ x_3 & y_3 \end{bmatrix} \begin{bmatrix} x \\ y \\ \end{bmatrix} = \begin{bmatrix} x_1x + y_1y \\ x_2x + y_2y \\ x_3x + y_3y \end{bmatrix} $$向量乘矩阵(左乘) #
行向量(左)压缩矩阵(右)
\(1 \times p\) * \(p \times m\) = \(1 \times m\)
行向量就等于只有一行的矩阵。理解右乘后,左乘就等于把右边的矩阵压缩到一维的输出。
$$ \begin{align} \begin{bmatrix} x & y \end{bmatrix} \begin{bmatrix} x_1 & x_2 \\ y_1 & y_2 \end{bmatrix} &= \begin{bmatrix} \begin{bmatrix} x & y \end{bmatrix} \begin{bmatrix} x_1 \\ y_1 \end{bmatrix} \begin{bmatrix} x & y \end{bmatrix} \begin{bmatrix} x_2 \\ y_2 \end{bmatrix} \end{bmatrix} \\ &= \begin{bmatrix} x_1x + x_2y & y_1x + y_2y \end{bmatrix} \end{align} $$矩阵乘矩阵 #
意义是矩阵(左)变换矩阵(右)
\(n \times p\) * \(p \times m\) = \(n \times m\)
就等于是线性组合,从右向左读,最右边的矩阵是初始状态,被左边的矩阵变换,可以无限串联下去。 计算方法可以把右侧的矩阵看做是诸多列向量,分别被左边的矩阵变换,再合并。
$$ \begin{bmatrix} x_1 & y_1 \\ x_2 & y_2 \end{bmatrix} \begin{bmatrix} a & c \\ b & d \end{bmatrix} = \begin{bmatrix} \begin{bmatrix} x_1 & y_1 \\ x_2 & y_2 \end{bmatrix} \begin{bmatrix} a \\ b \end{bmatrix} \begin{bmatrix} x_1 & y_1 \\ x_2 & y_2 \end{bmatrix} \begin{bmatrix} c \\ d \end{bmatrix} \end{bmatrix} = \begin{bmatrix} x_1a + y_1b & x_1c + y_1d \\ x_2a + y2_b & x_2c + y_2d \end{bmatrix} $$可以发现,最左边矩阵的输入维度是永远不会改变的。因为矩阵就是一个变换函数,函数的输入当然是固定的,而输出可以变。所以矩阵的连续相乘等同于复合函数。
$$ A = \begin{bmatrix} a_1 & a_2 \\ a_3 & a_4 \end{bmatrix} = f_A(x) $$$$ B = \begin{bmatrix} b_1 & b_2 \\ b_3 & b_4 \end{bmatrix} = f_B(x) $$$$ AB = f_A(f_B(x)) $$\(x\) 是任意合法(维度相符)的输入
进阶阅读:理解矩阵行列式