利用矩阵表示空间映射

回顾上一讲中所讲的内容,在默认基底 矩阵的核心(下):空间映射 - 图1构成的 Rn 空间中,矩阵 A 与列向量 x 的乘法 Ax 的本质就是变换向量的基底。将默认基底中的各基向量 矩阵的核心(下):空间映射 - 图2分别对应的变换为矩阵 A 的各列,由矩阵 A 的各列充当新的“基向量”,再结合原向量的坐标,得到目标向量在目标空间中的新位置。
总结概况一下:由于矩阵乘法的作用,原始向量的空间位置甚至其所在空间的维度和形态都发生了改变,这便是矩阵乘法的空间映射作用
我们要着重强调一下:在第一段中,我们将基向量打了引号,原因是这种说法并不完全准确。因为我们在上一讲的结尾曾经提到:矩阵 A 的各列向量作为向量 x 默认基底经过转换后的目标向量,由于其在维度和线性相关性方面存在各种不同的情况,因此这组目标向量的张成空间和原始向量所在的空间之间,就会存在多种不同的对应关系。
那么,这一讲里,我们就围绕下面的乘法式子,来重点讨论这个问题:
矩阵的核心(下):空间映射 - 图3

矮胖矩阵对空间的降维压缩

空间降维的原理

当 m矩阵的核心(下):空间映射 - 图4
映射前的原始向量是:矩阵的核心(下):空间映射 - 图5。原始向量 x 是 R3空间中的一个三维向量,它采用的是默认的基底:
矩阵的核心(下):空间映射 - 图6
向量 x 就是基底的任意线性组合中的具体一种。
依照我们介绍的基变换思想,经过矩阵 A 的基变换后,这组默认的基底被映射为了三个目标向量:
矩阵的核心(下):空间映射 - 图7
映射后的目标向量就相应的变成了:
矩阵的核心(下):空间映射 - 图8
映射前的向量 x,它的三个成分 (x1,x2,x3) 可以取任意值,因此向量 x 的分布为整个 R3 空间。那么我们关心的就是映射后的目标向量矩阵的核心(下):空间映射 - 图9的整体分布情况,换句话说就是映射后的空间。
这就回到了张成空间的问题,3 个二维向量必然是线性相关的,但是仍然分两种情况。
情况一:
如果这 3 个二维目标向量共面但不共线,那么其所有的线性组合结果就构成二维平面 R2,经过矩阵 A 的映射,整个向量空间就被压缩成了二维,我们看看下面这个例子:
我们按照共面不共线的要求设定一个映射矩阵:矩阵的核心(下):空间映射 - 图10
并在左侧的 R3 空间中任取三个向量:矩阵的核心(下):空间映射 - 图11
在矩阵 A 的作用下,向量 u 映射的结果是:矩阵的核心(下):空间映射 - 图12
向量 v 的映射结果是:矩阵的核心(下):空间映射 - 图13
向量 w 的映射结果是:矩阵的核心(下):空间映射 - 图14
我们在下面的图 1 中直观地将其标出,让这个三维空间到二维空间的压缩映射看上去更直观。

图1
情况二:
如果这 3 个二维向量共线,那么其线性组合就只能分布在二维平面 R2 中的一条过原点 (0,0) 的直线上,经过矩阵的映射,整个向量空间被压缩成了一维,我们还是通过举例来看一下。
我们选取一个三个列向量全部共线的矩阵 A’: 矩阵的核心(下):空间映射 - 图16
仍然取上个例子中的三个三维向量:矩阵的核心(下):空间映射 - 图17
向量 u 映射的结果是:矩阵的核心(下):空间映射 - 图18
向量 v映射的结果是:矩阵的核心(下):空间映射 - 图19
向量 w 的映射结果仍然是:矩阵的核心(下):空间映射 - 图20
我们将其标注在图 2 中,就很清楚地展现出了这种空间压缩的情况。
图2

高瘦矩阵无法覆盖目标空间

原理:向量信息不增加

现在我们来看看另一种形态的矩阵,即 m×n 矩阵中的 m>n 这种情况,我们称之为“高瘦”矩阵。
x 的 n 个基向量 ei 分别被矩阵 A 映射成了 n 个 m 维向量,由于 m>n,看上去 x 映射后的目标向量的维数提高了,变成了 m 维。那我们能不能说:经过矩阵 A 的映射,原始向量 x 构成的空间 Rn变成了维数更高的空间 Rm 呢?答案是否定的,哲学点说,一个事物无中生有,那是不可能的,平白无故地一个向量携带的信息怎么能增加呢?

实际举例

当然,这说得有点玄,我们用一个实际的 3×2 矩阵来举例:矩阵的核心(下):空间映射 - 图22
映射前的原始向量是二维空间中的 矩阵的核心(下):空间映射 - 图23映射的过程是:
矩阵的核心(下):空间映射 - 图24
由于映射前的向量 x 是二维空间 R2中的任意向量,类比一下,x1 和 x2取任意数,因此在矩阵 A 的作用下,整个二维空间的映射结果就是矩阵的核心(下):空间映射 - 图25这两个向量的张成空间。是不是同样熟悉?又回到老问题上来了,我们对于 矩阵的核心(下):空间映射 - 图26这两个三维向量,同样是分两种情况。
情况一:
两个向量线性无关,那么张成空间就是一个二维平面,这里需要注意一下,这个二维平面不是一个前面见过的由 x 轴和 y 轴构成的 R2 平面,而是一个“斜搭”在三维空间中的二维平面,构成平面的每一个点都是三维的,而这个二维平面的具体形态,则和这两个三维向量的具体值选取密切相关。
我们仍然举一个实际的例子:矩阵的核心(下):空间映射 - 图27我们还是在原空间 R2 内选取三个向量进行映射:
矩阵的核心(下):空间映射 - 图28
映射后的结果分别是:
矩阵的核心(下):空间映射 - 图29,矩阵的核心(下):空间映射 - 图30,矩阵的核心(下):空间映射 - 图31
我们通过图像来展示一下:
矩阵的核心(下):空间映射 - 图32
情况二:
如果两个向量线性相关,那么张成空间就是一条直线,那么同样地,这个直线是经过零点,并“斜穿”过三维空间 R3 的一条直线。
我们举一个实例:矩阵的核心(下):空间映射 - 图33我们仍然选取上文中的三个向量进行映射:
矩阵的核心(下):空间映射 - 图34
映射后的结果分别是:
矩阵的核心(下):空间映射 - 图35,矩阵的核心(下):空间映射 - 图36,矩阵的核心(下):空间映射 - 图37
我们仍然通过图像来展示一下:
矩阵的核心(下):空间映射 - 图38

分多种情况的方阵映射

至于说如果矩阵 A 是一个 n 阶方阵,分析方法也是一样的,核心问题仍然是分析 A 的各列向量的线性相关性,我们很容易发现,RnRn 空间中的向量经过矩阵 A 的映射,其目标空间的维度就是这 n 个 n 维列向量的张成空间的维度,其映射空间的维度必然小于等于 n。
我们简单地举 3 阶方阵 A 来举例:
矩阵的核心(下):空间映射 - 图39
当矩阵 A 的三个列向量线性无关的时候,意味着原始向量 x 的基经过映射后的目标向量仍然可以构成三维空间 R3的一组基。这是非常好的一种情况,意味着原始空间 R3 经过矩阵 A 的映射,其映射后得到的空间仍然是等维的 R3 空间。原始向量空间在这个过程中没有被压缩,并且映射后空间内的每一个向量也都能找到对应的原始向量。这种一一映射的关系我们在后面讲逆映射、逆矩阵的时候还会反复讨论,这里先有一个整体印象就好。
我们举实际的例子:矩阵的核心(下):空间映射 - 图40原始向量:矩阵的核心(下):空间映射 - 图41
映射后的结果:
矩阵的核心(下):空间映射 - 图42,矩阵的核心(下):空间映射 - 图43,矩阵的核心(下):空间映射 - 图44
我们再来看看空间图形上的变换:
矩阵的核心(下):空间映射 - 图45
而当 A 的三个列向量线性相关的时候,其实就退化成“高瘦”矩阵里所讨论的情况了,由于之前详细用图分析过具体情形,我们这里就只需要简单的说明结论,相信大家很容易理解。

  • 情况一:当这三个列向量共面但不共线的时候,R3空间中的向量经过映射,最后分布在“搭”在三维空间 R3 中的一个平面上。
  • 情况二:当这三个列向量共线的时候,R3 空间中的向量经过映射,最后分布在“穿”过三维空间 R3 中的一条直线上。

这些都是非常熟悉的场景了吧。

空间映射形态的决定因素

矩阵的秩

这一讲里,我们举了这么多例子,画了这么多的图,是时候来提炼一些东西了,我们把一个空间经过矩阵映射后得到的新空间称之为它的像空间。我们发现,一个原始空间,经过几个形状相同的矩阵进行映射,像空间的维数可能不同;经过几个不同形状的矩阵进行映射,又有可能得到维数相同的像空间。那么决定因素是什么?
决定因素就是空间映射矩阵的列向量,列向量张成空间的维数就是原始空间映射后的像空间维数。我们给矩阵列向量的张成空间维数取了一个名字,就叫作:矩阵的秩。从另一方面看,秩也可以说是该矩阵线性无关的列的个数。

用 Python 求解矩阵的秩

道理懂了这么多,在这一讲的最后我们动手解决一下实际的问题,如何用 Python 求解矩阵的秩?
我们一边回顾这一节出现的 5 个典型矩阵,一边来求它们的秩。
矩阵的核心(下):空间映射 - 图46,矩阵 A1的列的张成空间维数是 2,因此矩阵 A1的秩是 2。
矩阵的核心(下):空间映射 - 图47,矩阵 A2的列的张成空间维数是 1,因此矩阵 A2 的秩是 1。
矩阵的核心(下):空间映射 - 图48,矩阵 A3的列的张成空间维数是 2,因此矩阵 A3的秩是 2。
矩阵的核心(下):空间映射 - 图49,矩阵 A4 的列的张成空间维数是 1,因此矩阵 A4 的秩是 1。
矩阵的核心(下):空间映射 - 图50,矩阵 A5 的列的张成空间维数是 3,因此矩阵 A4 的秩是 3。

判断矩阵的列向量是否存在线性相关

如何判断一个矩阵它的列向量是否存在线性相关的情况呢?我们可以通过求出该矩阵的秩,然后通过矩阵的秩和列数相比较,如果矩阵的秩=列数,那么该矩阵的列向量就不存在线性相关。反之,如果秩≠列数,那么该矩阵的列向量就存在线性相关。
我们用代码验证一下。
代码片段:

  1. import numpy as np
  2. A_1 = np.array([[1, 1, 0],
  3. [1, 0, 1]])
  4. A_2 = np.array([[1, 2, -1],
  5. [2, 4, -2]])
  6. A_3 = np.array([[1, 0],
  7. [0, 1],
  8. [0, -1]])
  9. A_4 = np.array([[1, 2],
  10. [1, 2],
  11. [-1, -2]])
  12. A_5 = np.array([[1, 1, 1],
  13. [1, 1, 2],
  14. [1, 2, 3]])
  15. print(np.linalg.matrix_rank(A_1))
  16. print(np.linalg.matrix_rank(A_2))
  17. print(np.linalg.matrix_rank(A_3))
  18. print(np.linalg.matrix_rank(A_4))
  19. print(np.linalg.matrix_rank(A_5))

image.png
经过验证,程序结果和我们的分析一致。在这一讲里,我们通过大量细致的举例,展现了空间在不同秩的矩阵映射下得到的不同形态,并分析了其决定因素。这部分的基础非常重要,建立好了这个概念将非常有助于我们加深对逆矩阵、线性方程组和投影相关内容的本质理解。