<audio id="audio" title="08 | 线性映射：如何从坐标系角度理解两个向量空间之间的函数？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/77/bf/77f8a64dc7407c6fa93b56be5759f4bf.mp3"></audio>

你好，我是朱维刚。欢迎你继续跟我学习线性代数，今天我们要讲的内容是“线性映射”。

前面我们学的内容都是局限在一个线性空间，或者说一个向量空间中，但今天不一样哦，我们要来看看两个向量空间之间的关系，也就是线性映射。

之前我说过，向量也是对象，是能够相加，能够被标量乘的对象，而且这样计算的结果还是向量。而**加和标量乘这样的运算同样适用线性映射**。比如：两个实数向量空间$V$和$W$，有一个函数$\phi$来完成向量空间$V$到$W$的映射，如果我们想要同时保持向量空间结构不变，那么$\phi$就要满足：

$$\begin{array}{l}<br>
\phi(x+y)=\phi(x)+\phi(y)\\\<br>
\phi(\lambda x)=\lambda \phi(x)<br>
\end{array}$$

其中，所有$x$和$y$属于向量空间$V$， $λ$属于实数。于是，我们得到了线性映射的定义。

## 线性映射定义

假设有两个向量空间$V$和$W$，$\phi$是一个函数，它完成了向量空间V到W的线性映射，那么线性映射必须满足等式：

$$\phi(\lambda x+\varphi y)=\lambda \phi(x)+\varphi \phi(y)$$

其中，任意$x$和$y$都属于向量空间$V$，而任意 $λ$和$φ$都属于实数。

当然，我们能把线性映射表示成矩阵，也就是线性映射矩阵，或者叫做变换矩阵。但因为向量还能组合成矩阵的列，所以我们要特别注意区分矩阵表示的是线性映射还是向量的集合。向量的集合是静态的，而变换矩阵则是动态的哦。

接下来我们再来看看两个任意集合$V$到$W$的三类特殊映射，了解一下函数 $\phi$在不一样的情况下究竟表达了怎样的关系。

1. 函数$\phi$是单射（Injective）时：如果 $\phi(x)= \phi(y)$ ，那么$x=y$ ，其中任意$x$和$y$都属于集合$V$，从图中可以看出它表达的是一对一的关系，也就是我们可以由集合$V$的一个元素唯一确定一个集合$W$的元素。

<img src="https://static001.geekbang.org/resource/image/0c/26/0c18ea555d414b0a762b5477b4b0ca26.jpg" alt="">

1. 函数$\phi$是满射（Surjective）：也就是满足等式 $\phi(V)= W$，从图中我们可以看出它表达的是多对一的关系，也就是多个集合$V$的元素能够确定一个集合$W$的元素。

<img src="https://static001.geekbang.org/resource/image/0b/c2/0bca9ff7784015d6506be02d490bbcc2.jpg" alt="">

1. 函数$\phi$是双射（Bijective），就意味着它既是单射又是满射，从图中我们可以看出，它表达的是，所有$V$集合的元素都和$W$集合的元素一一对应，不多不少。

<img src="https://static001.geekbang.org/resource/image/2e/30/2e161117c8074163a53d5850a2315b30.jpg" alt=""><br>
通过这些定义，我们就可以引入几个线性映射的特殊概念了。

1. 同构（ Isomorphism）：即函数 $\phi$使$V$到$W$是线性且双射的；
1. 自同态（Endomorphism）：即函数 $\phi$使$V$到$V$是线性的；
1. 自同构（Automorphism）：即函数$\phi$使$V$到$V$是线性且双射的；
1. 把$V$到$V$，元素$x$到$x$的映射定义为恒等映射。

那么，为什么你需要了解这几个特殊的概念呢？那是因为我们需要通过这些概念引出一个定理：有限维度的向量空间$V$和$W$，如果它们的维度相等，那么它们就是同构的。那就是说，同一维度的向量空间某种程度来说是一样的，因为它们能在没有发生损失的条件下互相转换。

比如，$\mathrm{R}^{m \times n}$矩阵向量空间，和$\mathrm{R}^{mn}$长度是$mn$的向量空间，我们可以认为它们是相同的，因为它们维度都是$mn$，而且存在一个线性映射和双射使得它们能互相转换。还记得在矩阵那节课中，我提到的矩阵转换吗？很多时候这类转换就是为了计算方便。

<img src="https://static001.geekbang.org/resource/image/a5/4a/a59fefec5c22effacb862e61e87c034a.png" alt="">

## 线性映射的矩阵表示

刚才提到了线性映射的矩阵表达，那在了解了线性映射的定义后，现在是时候来具体看一看这个更直观，且有实践意义的表达了。之所以说它有实践意义，那是因为我们赋予了它动态特性，让矩阵表示线性变换的过程。

如果存在一个$n$维向量空间$V$和它的一个有序基$B=(b_{1},\cdots,b_{n})$，那么对于任意一个属于$V$的$x$，我们能得到一个这样的线性组合：$x=\alpha_{1} b_{1}+\cdots+\alpha_{n} b_{n}$，我们可以说

$$\alpha=\left[\begin{array}{c}<br>
\alpha_{1} \\\<br>
\cdot \\\<br>
\cdot \\\<br>
\cdot \\\<br>
\alpha_{n}<br>
\end{array}\right]$$

是$x$的坐标向量或坐标表达。

我们都了解二维直角坐标系，现在我们通过一个例子，看看一个同样的向量在两个不同坐标系中的表示，加深一下你对线性映射的理解。

<img src="https://static001.geekbang.org/resource/image/78/43/7827f539b7a52eec29d3b8272da55543.jpg" alt="">

假设图中绿色是坐标系$V$，黄色是坐标系$W$。

在$V$中，$e_{1}$和$e_{2}$是$V$的标准基，向量$x$由线性组合$e_{1}$和$e_{2}$表示，$x$的坐标是(2,2)，于是，$x$在$V$中可以被表示成：$x=2 e_{1}+2 e_{2}$。

在$W$中，$b_{1}$和$b_{2}$是$W$的标准基，向量$x$由线性组合$b_{1}$和$b_{2}$表示，而这里的$x$坐标就不同了，变成了(1.09,0.72)，于是，$x$在$W$中可以被表示成：$x=1.09 b_{1}+0.72 b_{2}$。

说到这，你是不是对线性映射有了一个更直观的感受？现在我们就把矩阵引入到线性映射中，于是，我们就有了**变换矩阵**，也就是用矩阵表示线性变换的过程。

变换矩阵的定义是：我们有向量空间$V$和$W$，它们各自有相应的有序基 $B=(b_{1},\cdots,b_{n})$和 $C=(c_{1},\cdots,c_{m})$ ，而$\phi$就是$V$到$W$的线性映射：$\phi\left(b_{j}\right)=\alpha_{1 j} c_{1}+\cdots+\alpha_{m j} c_{m}$。

线性映射$\phi$中的$j$是从$1$到$n$，于是，我们就能得到一个$\phi$的$m \times n$的变换矩阵 $A_{\phi}$，这个变换矩阵中的元素是$A_{\phi}(i, j)=\alpha_{i j}$，也就是说，$\phi\left(b_{j}\right)$的坐标就是 $A_{\phi}$的第$j$列。

我们可以来简化一下表达，把它表示成这样： $y=A_{\phi}(x)$。其中，$x$是$V$基于$B$基的坐标向量，$y$是$W$基于$C$基的坐标向量。所以，变换矩阵可以被用来在有序基上，映射坐标。

我们来看一个变换矩阵例子：已知两个向量空间$V$和$W$，它们各自相应的有序基是 $B=(b_{1},\cdots,b_{3})$和 $C=(c_{1},\cdots,c_{4})$ ，线性映射$\phi$表示成以下形式。

$$\begin{array}{l}<br>
\phi\left(b_{1}\right)=c_{1}-c_{2}+3 c_{3}-c_{4} \\\<br>
\phi\left(b_{2}\right)=2 c_{1}+c_{2}+7 c_{3}+2 c_{4} \\\<br>
\phi\left(b_{3}\right)=3 c_{2}+c_{3}+4 c_{4}<br>
\end{array}$$

于是，我们可以通过这些条件得到变换矩阵$A_{\phi}$如下。

$$ A_{\phi}=\left[\begin{array}{ccc}<br>
1 &amp; 2 &amp; 0 \\\<br>
-1 &amp; 1 &amp; 3 \\\<br>
3 &amp; 7 &amp; 1 \\\<br>
-1 &amp; 2 &amp; 4<br>
\end{array}\right]$$

理解到这里还不算透彻，我们要更进一步，看看在现实图形图像处理中的线性变换是什么样的。接下来我们通过下面三个图形的例子来理解一下。

<img src="https://static001.geekbang.org/resource/image/02/5f/0252e3b0c13f41e0dde6fa781c3eed5f.jpg" alt="">

第一个图形是原始数据，你可以把它看成是由几百个向量的密集点组成的图。

第二个图形的效果看起来很简单，是由原始数据经过45度变换后得到的，它的变换矩阵是下面这样的。

$$A_{1}=\left[\begin{array}{cc}<br>
\cos \left(\frac{\pi}{4}\right) &amp; -\sin \left(\frac{\pi}{4}\right) \\\<br>
\sin \left(\frac{\pi}{4}\right) &amp; \cos \left(\frac{\pi}{4}\right)<br>
\end{array}\right]$$

第三个图形是原始数据沿平行轴拉伸两倍的效果，变换矩阵是下面这样的。

$$A_{2}=\left[\begin{array}{cc}<br>
2 &amp; 0 \\\<br>
0 &amp; 1<br>
\end{array}\right]$$

当然，这三个图形是比较简单的例子，是为了方便你理解，其实我们还能做更复杂的变换，比如：旋转、伸缩的组合等等。

## 基的改变

之前我们讨论的线性映射都是在**基**是一定的情况下，通过变换矩阵做线性映射。那如果基改变了呢？讨论基的改变在实践中也是有重要意义的。比如，为了最小化数据压缩损失，我们需要找到一个合适的被用来数据投影的基。

现在我们就来看看，如果我们改变向量空间$V$和$W$的基，线性映射$\phi$的变换矩阵会如何改变。我们给向量空间$V$和$W$各自增加两个有序基：$\widetilde{B}=\left(\tilde{b}_{1}, \ldots, \widetilde{b}_{n}\right)$和$\widetilde{C}=\left(\tilde{c}_{1}, \ldots, \widetilde{c}_{m}\right)$，而 $\tilde{A}_{\phi}$是基于新的有序基的变换矩阵。这样，$\tilde{A}_{\phi}$变换矩阵的计算公式就是：$\tilde{A}_{\phi}=T^{-1} A_{\phi} S$。

在这个新的公式中，$S$是 $\mathrm{R}^{n \times n}$向量空间$V$的恒等映射变换矩阵，向量空间$V$的恒等映射把基于$\widetilde{B}$的坐标，映射到基于$B$的坐标上。同理，$T$是$\mathrm{R}^{m \times m}$向量空间$W$的恒等映射变换矩阵，向量空间$W$的恒等映射把基于$\widetilde{C}$的坐标，映射到基于$C$的坐标上。

理论是这样的，那我们还是要通过一个例子来看一下，基改变后，新的线性映射 $\phi$的变换矩阵到底是如何获取的。我们已知，一个三维实数向量空间$\mathrm{R}^{3}$到四维实数向量空间$\mathrm{R}^{4}$的一个线性映射，它们各自有标准基$B$和$C$。

$$B=\left\{\left[\begin{array}{l}<br>
1 \\\<br>
0 \\\<br>
0<br>
\end{array}\right],\left[\begin{array}{l}<br>
0 \\\<br>
1 \\\<br>
0<br>
\end{array}\right],\left[\begin{array}{l}<br>
0 \\\<br>
0 \\\<br>
1<br>
\end{array}\right]\right\}, C=\left\{\left[\begin{array}{l}<br>
1 \\\<br>
0 \\\<br>
0 \\\<br>
0<br>
\end{array}\right],\left[\begin{array}{l}<br>
0 \\\<br>
1 \\\<br>
0 \\\<br>
0<br>
\end{array}\right],\left[\begin{array}{l}<br>
0 \\\<br>
0 \\\<br>
1 \\\<br>
0<br>
\end{array}\right],\left[\begin{array}{l}<br>
0 \\\<br>
0 \\\<br>
0 \\\<br>
1<br>
\end{array}\right]\right\}$$

基于它们各自的标准基$B$和$C$，它的变换矩阵是：

$$A_{\phi}=\left[\begin{array}{ccc}<br>
1 &amp; 2 &amp; 0 \\\<br>
-1 &amp; 1 &amp; 3 \\\<br>
3 &amp; 7 &amp; 1 \\\<br>
-1 &amp; 2 &amp; 4<br>
\end{array}\right]$$

那么现在，我们来看一下，基$B$和$C$改变为$\widetilde{B}$和$\widetilde{C}$之后，会有怎样的变化。

$$\widetilde{B}=\left\{\left[\begin{array}{l}<br>
1 \\\<br>
1 \\\<br>
0<br>
\end{array}\right],\left[\begin{array}{l}<br>
0 \\\<br>
1 \\\<br>
1<br>
\end{array}\right],\left[\begin{array}{l}<br>
1 \\\<br>
0 \\\<br>
1<br>
\end{array}\right]\right\}, \widetilde{C}=\left\{\left[\begin{array}{l}<br>
1 \\\<br>
1 \\\<br>
0 \\\<br>
0<br>
\end{array}\right],\left[\begin{array}{l}<br>
1 \\\<br>
0 \\\<br>
1 \\\<br>
0<br>
\end{array}\right],\left[\begin{array}{l}<br>
0 \\\<br>
1 \\\<br>
1 \\\<br>
0<br>
\end{array}\right],\left[\begin{array}{l}<br>
1 \\\<br>
0 \\\<br>
0 \\\<br>
1<br>
\end{array}\right]\right\}$$

对于新基$\widetilde{B}$和$\widetilde{C}$，我们得到$S$和$T$：

$$S=\left[\begin{array}{lll}<br>
1 &amp; 0 &amp; 1 \\\<br>
1 &amp; 1 &amp; 0 \\\<br>
0 &amp; 1 &amp; 1<br>
\end{array}\right], T=\left[\begin{array}{llll}<br>
1 &amp; 1 &amp; 0 &amp; 1 \\\<br>
1 &amp; 0 &amp; 1 &amp; 0 \\\<br>
0 &amp; 1 &amp; 1 &amp; 0 \\\<br>
0 &amp; 0 &amp; 0 &amp; 1<br>
\end{array}\right]$$

于是，我们就可以通过公式得到想要的$\tilde{A}_{\phi}$了。

$$\tilde{A}_{\phi}=T^{-1} A_{\phi} S=\left[\begin{array}{ccc}<br>
-4 &amp; -4 &amp; -2 \\\<br>
6 &amp; 0 &amp; 0 \\\<br>
4 &amp; 8 &amp; 4 \\\<br>
1 &amp; 6 &amp; 3<br>
\end{array}\right]$$

## 两个重要的子空间

最后，我再来讲两个重要的子空间——核空间和像空间，说它们重要是有原因的。核空间可以帮助我们研究线性方程组的性质，同时还可以帮助我们把复杂问题简化，也就是将复杂的大集合分解成小集合的并来研究。而像空间可以帮助我们快速得到线性方程组的秩，这样就能快速判断线性方程组解的情况。现在我们来具体了解一下。

### 核空间

核空间也叫做零空间，你还记得$Ax=b$吗？核空间关注的就是$Ax=0$，也就是向量空间$V$中所有经过$\phi$映射为零的向量集合，用符号表示就是：$\operatorname{ker}(\phi)$ 。核的维数叫做零化度（nullity），表示成：$\operatorname{dim}(\operatorname{ker}(\phi))$。

### 像空间

向量空间$V$中所有经过$\phi$映射后的向量集合，叫做像空间，用符号表示就是：$\operatorname{im}(\phi)$，像空间维数就是秩，表示成：$\operatorname{rk}(\phi)$。

通过图形表达出来，你应该能够更好地理解。

<img src="https://static001.geekbang.org/resource/image/55/b0/55cf796942f84eced026899316427eb0.jpg" alt="">

最后我以一个定理来结束本节的内容，秩-零化度定理：V的维数等于核空间维数与像空间维数之和$\operatorname{dim}(\mathrm{V})=\operatorname{dim}(\operatorname{ker}(\phi))+\operatorname{rk}(\phi)$。

## 本节小结

好了，到这里线性映射这一讲就结束了，最后我再总结一下前面讲解的内容。

线性映射赋予了线性代数灵魂，也让它在计算机科学中发挥了很大的作用。线性映射的矩阵变换是这一节的重点，你要牢固掌握，因为它在无数现实场景中都在使用，比如：三维图形图像处理中的线性变换，图形的伸缩、旋转等等。

## 线性代数练习场

好，今天练习时刻到了，刚刚我们通过图形图像处理中的线性变换的例子，讲了矩阵变换。现在我们还是以这个例子为基础，不过这一次轮到你来解答问题了。如果我们把原始数据整体沿平行轴收缩两倍，那变换矩阵会是怎样的呢？

欢迎在留言区或者部落里晒出你的变换矩阵。如果你觉得有所收获，也欢迎你把这篇文章分享给你的朋友。
