<audio id="audio" title="07 | 基和秩：为什么说它表达了向量空间中“有用”的向量个数？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/a0/10/a0588560b7087bf65884049ed12d9410.mp3"></audio>

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

了解向量空间和线性组合后，我们必然会推进到**基**和**秩**的学习，为什么这么说呢？因为秩表达了向量空间中“有用”的向量个数。

这里“有用”两个字就限定了范围，也就是说，在一个向量空间$V$中，我们是只对某些特殊的向量集合$A$感兴趣的。对于$A$来说，任意属于向量空间$V$的向量，都能够被$A$中的一个向量的线性组合来表示。这里“感兴趣的向量集合”就和秩的应用场景有关了，我们来举几个秩的应用场景：

- 秩可以帮助我们研究向量组的线性相关问题，从图形图像应用角度来说，就是处理冗余数据的表达，可以被用来恢复数据，或者降噪；
- 我们可以通过秩来快速判断线性方程组解的情况，有时快速判断线性方程组有解、无解、无穷解几种情况，比“解”本身更重要，因为它能初步得出线性方程组的大致轮廓，让你不用纠结于纯粹的求解；
- 在解析几何方面，秩可以判断两条直线的位置关系，用在图形的形状和夹角判断上；
- 秩还可以把解决线性空间的维数问题，简化成分析向量个数问题，化繁为简。

## 生成集合与基

刚才简单介绍了“有用”的向量，接下来，我来详细刻画一下我们感兴趣的“特殊的向量集合”。

在重点介绍基之前，我们得先来了解“生成集合”的定义：一个向量空间$V$，和一个向量集合$A=｛x_{1}, x_{2}, … , x_{k}｝$，向量空间$V$包含$A$，如果$V$的每一个向量都可以被$x_{1}, x_{2}, … , x_{k}$的一个线性组合表示，那么$A$就是$V$的一个生成集合。$A$的向量的所有线性组合的集合就是$A$的生成空间，我们可以写成这样的形式：$V=span[A]$或者$V=span[x_{1}, x_{2}, … , x_{k}]$。

我们再进一步，来看看最小生成集合。最小生成集合，顾名思义就是小得不能再小的生成集合，向量空间V的每个线性无关的生成集合都是最小生成集合，也叫做**基（basis）**。基是刻画向量空间的基本工具，掌握了线性映射作用在向量空间的一组基上的效果，就等于掌握了线性映射对向量空间中任意元素的效果，所以它非常重要，我想这也是它叫“基”或“基底”的原因吧。

有了生成集合的铺垫，我们就能得出这样3个结论，假设$B$是$V$的一个基，那么我们就可以得到三个结论：

1. $B$是一个最小生成集合；
1. $B$是$V$中的一个最大向量线性无关集合，因为增加任何一个向量到集合中，就会导致它线性相关；
1. 任意属于向量空间$V$的向量，都能够被$B$中的一个向量的线性组合来表示，而且每一个线性组合都是唯一的。

但只了解理论是不够的，我们还需要一些练习。现在请你来思考一下，下面这些集合是不是基？

1.在实数三维向量空间中，下面这个集合是基吗？

$$A=\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\}$$

2.在实数三维向量空间中，下面这两个集合都是基吗？

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

$$A_{2}=\left\{\left[\begin{array}{l}<br>
0.5 \\\<br>
0.8 \\\<br>
0.4<br>
\end{array}\right],\left[\begin{array}{c}<br>
1.8 \\\<br>
0.3 \\\<br>
0.3<br>
\end{array}\right],\left[\begin{array}{c}<br>
-2.2 \\\<br>
-1.3 \\\<br>
3.5<br>
\end{array}\right]\right\}$$

3.在实数四维向量空间中，下面这个集合是基吗？

$$A=\left\{\left[\begin{array}{l}<br>
1 \\\<br>
2 \\\<br>
3 \\\<br>
4<br>
\end{array}\right],\left[\begin{array}{c}<br>
2 \\\<br>
-1 \\\<br>
0 \\\<br>
2<br>
\end{array}\right],\left[\begin{array}{c}<br>
1 \\\<br>
1 \\\<br>
0 \\\<br>
-4<br>
\end{array}\right]\right\}$$

> 
小提示：你可以先判断它们是否线性相关。每个向量空间V都有一个基，也可能有多个基。


这里你需要注意的是，一个向量空间的维度和它的基向量数是一致的，而它的维度不是一定和向量元素的数量相等的，就比如下面这个向量空间。

$$<br>
V=\operatorname{span}\left[\left[\begin{array}{l}<br>
0 \\\<br>
1<br>
\end{array}\right]\right]<br>
$$

这个向量空间是一维的，但它的基向量有两个元素。

了解了向量空间的基，那我们该如何得到向量子空间的基呢？别怕，你只要通过三步操作，就能得到向量子空间$U$的基，$U=span[x_{1}, x_{2}, … , x_{m}]$。

1. 把向量$x_{1}, x_{2}, … , x_{m}$组合成矩阵$A$的列；
1. 得到$A$的行阶梯形矩阵；
1. 和主元列相关的向量就是$U$的一个基。

现在，我通过一个例子来说明如何判断向量子空间的基。一个向量子空间$U$属于五维实数向量空间，$U$的生成集合是$x_{1}, x_{2}, x_{3}, x_{4}$。

$$<br>
x_{1}=\left[\begin{array}{c}<br>
1 \\\<br>
2 \\\<br>
-1 \\\<br>
-1 \\\<br>
-1<br>
\end{array}\right], x_{2}=\left[\begin{array}{c}<br>
2 \\\<br>
-1 \\\<br>
1 \\\<br>
2 \\\<br>
-2<br>
\end{array}\right], x_{3}=\left[\begin{array}{c}<br>
3 \\\<br>
-4 \\\<br>
3 \\\<br>
5 \\\<br>
-3<br>
\end{array}\right], x_{4}=\left[\begin{array}{c}<br>
-1 \\\<br>
8 \\\<br>
-5 \\\<br>
-6 \\\<br>
1<br>
\end{array}\right]<br>
$$

$x_{1}, x_{2}, x_{3}, x_{4}$向量中的哪些是$U$的基？要解这个问题，首先就要判断$x_{1}, x_{2}, x_{3}, x_{4}$是否是线性无关的，也就是解方程组：$\lambda_{1} x_{1}+\lambda_{2} x_{2}+\lambda_{3} x_{3}+\lambda_{4} x_{4}=0$，接下来我们就按刚才说的三步，一起来走一遍。

第一步，我们把向量$x_{1}, x_{2}, x_{3}, x_{4}$组合成矩阵的列。

$$<br>
\left[\begin{array}{cccc}<br>
1 &amp; 2 &amp; 3 &amp; -1 \\\<br>
2 &amp; -1 &amp; -4 &amp; 8 \\\<br>
-1 &amp; 1 &amp; 3 &amp; -5 \\\<br>
-1 &amp; 2 &amp; 5 &amp; -6 \\\<br>
-1 &amp; -2 &amp; -3 &amp; 1<br>
\end{array}\right]<br>
$$

第二步，我们把上一步中得到的矩阵转换成行阶梯形矩阵。

$$<br>
\left[\begin{array}{cccc}<br>
1 &amp; 2 &amp; 3 &amp; -1 \\\<br>
0 &amp; 1 &amp; 2 &amp; -2 \\\<br>
0 &amp; 0 &amp; 0 &amp; 1 \\\<br>
0 &amp; 0 &amp; 0 &amp; 0 \\\<br>
0 &amp; 0 &amp; 0 &amp; 0<br>
\end{array}\right]<br>
$$

第三步，我们从主元列可以判断，$x_{1}, x_{2}, x_{4}$是线性无关的。所以，我们就得出了结论：向量集合$x_{1}, x_{2}, x_{4}$是$U$的一个基。

## 秩

聊完了生成集合和基，我们来看看线性代数中的秩。我在前面说过，线性代数中的秩的作用可大了，它可以用来求方程组的通解的个数，可以用来判断向量组中的线性无关向量的个数，可以判定非齐次方程组有无解，还可以判断矩阵的行列式的值是否为零等等。

那我们就得来看看秩的定义了：一个矩阵$A$的线性无关列数，和它的线性无关行数相等，则这个列数或行数就是矩阵的秩，表示成：$rk(A)$，rk是英语rank的缩写。矩阵的秩有一些重要性质需要你熟练掌握：

- 列秩等于行秩，也就是$rk(A)=rk(A^{T})$；
- $m*n$矩阵$A$的列组成子空间$U \subseteq R^{m}$的生成空间，而且$U$的维度等于矩阵$A$的秩，那么，$U$的一个基可以通过$A$的高斯消元法得到的主元列来获取；
- $m*n$矩阵$A$的行组成子空间$W \subseteq R^{n}$的生成空间，而且$W$的维度等于矩阵$A$的秩，那么，$W$的一个基可以通过$A^{T}$的高斯消元法得到的主元列来获取；
- $n*n$方阵$A$只有在它的秩等于$n$时可逆；
- $m*n$矩阵$A$和实数$b$组成的线性方程：$Ax=b$，只有在$A$的秩和$A$的增广矩阵的秩相等的情况下，$Ax=b$才有解；
- $m*n$矩阵$A$，对于$Ax=0$的解的子空间的维度等于$n-rk(A)$，这个子空间叫做零空间，零空间会在下一篇线性映射中介绍；
- $m*n$矩阵$A$，如果满足$A$的秩等于$m$行数和$n$列数中的最小值，$rk(A)=min(m,n)$，则矩阵$A$就是满秩矩阵，非满秩矩阵也叫做不满秩矩阵。

说了那么多矩阵秩的性质，现在我们还是通过两个例子，来看一看如何计算矩阵的秩。

1.已知矩阵A如下：

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

因为它是行阶梯形矩阵，所以我们可以很直观地判断，它有两个线性无关的列或行，所以$A$的秩就是$2$，$rk(A)=2$。

2.已知矩阵A如下：

$$<br>
\left[\begin{array}{ccc}<br>
1 &amp; 2 &amp; 1 \\\<br>
-2 &amp; -3 &amp; 1 \\\<br>
3 &amp; 5 &amp; 0<br>
\end{array}\right]<br>
$$

针对这样的矩阵，我们可以先使用高斯消元法，得到它的行阶梯形矩阵。

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

通过主元列判断后，我们发现，线性无关的列或行数是$2$，所以，$A$的秩是$2$，$rk(A)=2$。

## 秩在图像恢复和降噪上的运用

在了解了基和秩的定义后，是时候来看看在应用方面的运用了。在[线性空间](https://time.geekbang.org/column/article/270329)那节课的讲解中，我通过车辆的牌照识别应用场景，提到了一种机器学习的降维算法：主成分分析PCA。

其实，它在图像降噪的场景中也是大有用处的，特别是它和低秩矩阵结合（低秩是指矩阵的秩比较小，而矩阵的低秩性是指矩阵的秩相对矩阵的行数或列数而言很小）。我们为什么要进行图像降噪呢？那是因为，现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响，含有“杂数据”，也就是没有意义的数据。

当我们把图像转换成一个矩阵后，它的秩如果远远小于矩阵大小的话，图像就是低秩的，那就是说，低秩矩阵的每行或每列都可以用其它的行或列线性表示，这也说明了这个矩阵包含了大量的冗余信息。而这些冗余信息就是我们要处理的对象，我们可以用冗余信息来**对错误的图像进行恢复**，或者可以**去除这些冗余信息对图片进行降噪**。

现在我用一个简单的例子来说明一下图像的恢复和降噪到底是怎么做的，在现实中，一张图片很多地方其实是相似的，比如这张来自百度搜索的绿化图片。

<img src="https://static001.geekbang.org/resource/image/b3/f1/b37d5d67b2f28a4f931c986642a057f1.jpg" alt="">

这两张图片中大部分都是绿化的背景，相比较而言，左侧的图片就是低秩的，因为它包含的信息量很少。而右侧这张再加上向日葵和飞机的图片就不同了，包含的信息会多很多，那么这时，它的秩要比全是绿化的秩要高很多，也就是说向日葵和飞机会增加图像矩阵的秩。

现实中的图片往往是低秩的，因为取景的对象，不论是和外部还是其自身都有很多相似性，如果图片的秩比较高，就说明它的噪声比较严重，所以，图像处理的低秩在图片的降噪上的运用比较多。

如果你想要使用图像的低秩来恢复图片或者降噪，首先要构建低秩矩阵的先验模型，再求解这个模型，得到低秩矩阵，这种模型就是低秩矩阵恢复模型（LRMR）。LRMR的具体算法就用到了PCA，或者增强型PCA、Robust PCA。具体RPCA的算法由于还涉及到了其他方面的知识，比如：迭代阈值算法、加速近端梯度算法、对偶方法，以及拉格朗日乘子法，感兴趣的话可以参考类似文章。

## 本节小结

好了，到这里基和秩这一讲就结束了，最后我再总结一下前面讲解的内容。

向量空间和线性组合更多的是理论导向，而基和秩就有些不同了，在前者理论的基础上，叠加的是实践，强调的是“有用”和“最小化”。**基**是刻画向量空间的基本工具，掌握了线性映射作用在向量空间的一组基上的效果，就等于掌握了线性映射对向量空间中任意元素的效果，而**秩**可以用来求方程组的通解的个数，判断向量组中的线性无关向量的个数，判定非齐次方程组有无解，判断矩阵的行列式的值是否为零等等。所以，你一定要掌握基和秩，为后面的学习打好基础。

## 线性代数练习场

好，今天练习时刻到了，我们来看一看如何计算这个矩阵的秩：

$$<br>
\left[\begin{array}{ccccc}<br>
-2 &amp; 4 &amp; -2 &amp; -1 &amp; 4 \\\<br>
4 &amp; -8 &amp; 3 &amp; -3 &amp; 1 \\\<br>
1 &amp; -2 &amp; 1 &amp; -1 &amp; 1 \\\<br>
1 &amp; -2 &amp; 0 &amp; -3 &amp; 4<br>
\end{array}\right]<br>
$$

> 
提示：你可以通过高斯消元法，获取行阶梯形矩阵后，再进行判断。


欢迎在留言区或部落里晒出你的运算过程和结果。如果你有所收获，也欢迎你把这篇文章分享给你的朋友。
