《线性代数》7. 空间和矩阵的秩

作者:@古明地盆
喜欢这篇文章的话,就点个关注吧,或者关注一下我的公众号也可以,会持续分享高质量Python文章,以及其它相关内容。:点击查看公众号


欧几里得空间

前面我们一直提到了空间这个概念,比如二维空间、三维空间等等,并在此基础上拓展到 n 维空间,尽管当时并没有对空间做明确的定义,但相信大家也能理解。然而数学是严谨的,必须要有严格的定义,那么接下来就从数学的角度看看什么是空间。

空间是一个集合,不管是几维的,都可以看作是一个集合,这样的空间我们称之为欧几里得空间。我们目前所接触到的都是欧几里得空间,它是有序实数元组的集合,像 (6,66) 属于二维欧几里得空间的一个元组,(3.14,0,sqrt(2)) 属于三维欧几里得空间的一个元组。另外注意定义,欧几里得空间是有序实数元组的集合,里面包含了有序,所以 (6,66)(66,6) 是不同的元组。

在数学表达法上,会将二维欧几里得空间表示 R2,三维就是 R3n 维就是 Rn,其中 R 表示实数集。

当然,有序实数元组有点拗口,我们更习惯称之为点集,也就是原点到终点的向量集合,所以欧几里得空间也可以叫向量空间。另外向量空间不止欧几里得空间一种,只是欧几里得空间太常见了,所以它代指了向量空间。我们说向量的时候,默认指的是欧几里得空间的向量(实数元组)。但向量空间的种类是很多的,除了欧几里得空间外,还有很多其它空间,我们称为广义向量空间。

维度

再来聊一聊维度,我们一直说空间是几维的,那么这个维度该怎么定义呢?还记得空间的基吗,它是一组向量(也被称为基向量),要满足两个性质:

  • 能够生成整个空间
  • 线性无关

而空间的基的向量个数,就叫做空间的维度。而最常见的基便是有标准单位向量组成的基,也叫标准正交基。

比如二维欧几里得空间中最常见的基就是 e1=(1,0)T,e2=(0,1)T,显然它的向量个数为 2,所以空间是二维的,dim(R2)=2。并且这个二维也意味着,每个向量(有序实数元组)的元素个数为 2,同理三维欧几里得空间里每个向量的元素个数为 3。

行空间与矩阵的行秩

有三个向量:u=(2,0,0),v=(1,0,0),w=(0,0,1),那么它们生成的空间的维度是多少?如果三个向量是线性无关的,那么生成的肯定是三维空间,但很明显 u,v 线性相关,并且和 w 都线性无关。因此生成的空间是二维的,也就是说这三个向量组成了三维空间的一个平面。

由于当前这个例子比较简单,所以我们能一眼看出来,但如果向量的维度比较大、数量比较多,就不方便了。那么有没有系统性的方法,得到这个答案呢?说白了就是有一堆的向量,如何判断它们生成的是几维空间,换句话说就是如何判断最多线性无关的向量有多少个。很简单,将这些向量按照行排列成一个矩阵,并化为行最简模式,非零行的个数就是生成空间的维度。

比如有三个向量,(1,2,3),(1,4,13),(3,5,4),我们看看它们生成的空间是几维的?

{1231413354}={1230210015}={123015000}={107015000}

非零行的个数为 2,所以生成空间是二维的。

结论:给出一组向量 v1,v2,v3,...,vn,将这组向量行排列成一个矩阵,并使用高斯消元法进行化简,最终非零行的个数就是这组向量生成的空间的维度,而非零行对应的向量就是生成空间的一组基。

并且这些向量可以看作是矩阵的行向量,因此这些向量生成的空间也叫做矩阵的行空间(Row Space);那么同理,如果是矩阵的列向量生成的空间,那么叫矩阵的列空间(Column Space)。

目前我们只需要关注行空间即可,它的求解过程就是上面说的那样,将矩阵化为行最简模式,非零行的数量就是行空间的维度。说白了,如果把它看作是齐次线性方程组的系数的话,那么非零行的个数就是方程组的约束的个数。但现在有一个更专业的名称,非零行的个数我们也称为矩阵的行秩(Row Rank),所以行空间的维度就是矩阵的行秩(反之亦然)。

列空间与矩阵的列秩

将矩阵化成行最简模式,非零行的数量就是矩阵的行秩,也是矩阵的行向量生成的空间(矩阵的行空间)的维度。既然有行空间和行秩,那么就有列空间和列秩,矩阵的列向量生成的空间就叫矩阵的列空间,列空间的维度就叫做矩阵的列秩。但行秩和列秩的求法还不一样,我们举个例子。

假设有三个向量:u=(2,0,0),v=(1,0,0),w=(0,0,1),它们生成的空间的维度是多少?首先我们可以将它们行排列,算出矩阵的行秩,便是这些向量生成的空间的维度。但我们也可以将它们按照列来排列,算出矩阵的列秩,也是这些向量生成的空间的维度。

不管是矩阵的行秩(行空间的维度),还是矩阵的列秩(列空间的维度),都是这组向量生成的空间的维度,只是看待的视角不同。那么矩阵的列秩如何求呢?

{210000001}·{xyz}=0

我们以列的模式组织的话,那么得到的矩阵可以看作是以下方程组的系数矩阵。

{2xy=0z=0

然后我们依旧化为行最简模式:

{210000001}={10.50001000}

然后我们要找到主元(每一行中最左侧的非零元素),第一行的主元是 1,它位于第一列;第二行全为 0,没有主元;第三行的主元是 1,位于第三列。所以包含主元的列总共有两列,所以矩阵的列秩为 2。

  • 一个矩阵的行最简形式的非零行个数,就是矩阵的行秩,也是行空间的维度。
  • 一个矩阵的行最简形式的主元列个数,就是矩阵的列秩,也是列空间的维度。

如果把一组向量排成一个矩阵,那么不管是横着排还是竖着排,结果都是一样的。横着排就求行秩,竖着排就求列秩,结果都是这一组向量生成的空间的维度。

如果是行空间,那么所有的非零行就是空间的一组基。那如果是列空间呢?如果获取相应的基呢。首先我们求出了主元列,这里是第一列和第三列,那么原矩阵中的第一列和第三列对应的向量就是空间的一组基,也就是 (2,0,0),(0,0,1)

注意:基对应的一定是原矩阵中的列,而不是行最简模式中的列,因为我们是按行化简的,不是按列化简。行最简模式只是让我们求出主元都在哪一列,主元列对应的原矩阵的列才是空间的基。

矩阵的秩

矩阵的行秩和列秩并不是孤立存在的,它们之间有着很优美的联系。

目前我们已经明白了什么是行秩,什么是列秩,然后我们再给出一个结论,就是矩阵的行秩和列秩是相同的。也就是说,不管一组向量它是横着排还是竖着排,都不影响,因为一个矩阵的行秩和列秩相同。并且这个矩阵不一定是方阵,任意形状的矩阵都满足此结论,因此行秩和列秩我们统称为矩阵的秩(Rank)。

然后对于 n 阶方阵来说,如果它的秩和 n 相同,那么这个矩阵就是满秩的(Full Rank)。此时:

  • 行最简形式的非零行个数为 n
  • 行最简形式的主元列个数为 n

而对于一个满秩的方阵在化为行最简模式之后,得到的一定是单位矩阵。

然后来看看如何用 Numpy 来求矩阵的秩。

import numpy as np

mat = np.array(
    [[2, -1, 0], [0, 0, 0], [0, 0, 1]]
)
print(mat)
"""
[[ 2 -1  0]
 [ 0  0  0]
 [ 0  0  1]]
"""
print(np.linalg.matrix_rank(mat))
"""
2
"""

非常简单,一个函数就搞定了。

posted @   古明地盆  阅读(758)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2020-09-06 《深度剖析CPython解释器》23. 剖析Python中模块的导入机制、Python是如何加载模块的
2020-09-06 《深度剖析CPython解释器》22. 解密Python中的生成器对象,从字节码的角度分析生成器的底层实现以及执行逻辑
2019-09-06 全方位介绍大数据生态圈中最基础、最重要的组件Hadoop
点击右上角即可分享
微信分享提示

目录导航