《线性代数》7. 空间和矩阵的秩
作者:@古明地盆
喜欢这篇文章的话,就点个关注吧,或者关注一下我的公众号也可以,会持续分享高质量Python文章,以及其它相关内容。:点击查看公众号
欧几里得空间
前面我们一直提到了空间这个概念,比如二维空间、三维空间等等,并在此基础上拓展到 维空间,尽管当时并没有对空间做明确的定义,但相信大家也能理解。然而数学是严谨的,必须要有严格的定义,那么接下来就从数学的角度看看什么是空间。
空间是一个集合,不管是几维的,都可以看作是一个集合,这样的空间我们称之为欧几里得空间。我们目前所接触到的都是欧几里得空间,它是有序实数元组的集合,像 属于二维欧几里得空间的一个元组, 属于三维欧几里得空间的一个元组。另外注意定义,欧几里得空间是有序实数元组的集合,里面包含了有序,所以 和 是不同的元组。
在数学表达法上,会将二维欧几里得空间表示 ,三维就是 , 维就是 ,其中 表示实数集。
当然,有序实数元组有点拗口,我们更习惯称之为点集,也就是原点到终点的向量集合,所以欧几里得空间也可以叫向量空间。另外向量空间不止欧几里得空间一种,只是欧几里得空间太常见了,所以它代指了向量空间。我们说向量的时候,默认指的是欧几里得空间的向量(实数元组)。但向量空间的种类是很多的,除了欧几里得空间外,还有很多其它空间,我们称为广义向量空间。
维度
再来聊一聊维度,我们一直说空间是几维的,那么这个维度该怎么定义呢?还记得空间的基吗,它是一组向量(也被称为基向量),要满足两个性质:
- 能够生成整个空间
- 线性无关
而空间的基的向量个数,就叫做空间的维度。而最常见的基便是有标准单位向量组成的基,也叫标准正交基。
比如二维欧几里得空间中最常见的基就是 ,显然它的向量个数为 2,所以空间是二维的,。并且这个二维也意味着,每个向量(有序实数元组)的元素个数为 2,同理三维欧几里得空间里每个向量的元素个数为 3。
行空间与矩阵的行秩
有三个向量:,那么它们生成的空间的维度是多少?如果三个向量是线性无关的,那么生成的肯定是三维空间,但很明显 线性相关,并且和 都线性无关。因此生成的空间是二维的,也就是说这三个向量组成了三维空间的一个平面。
由于当前这个例子比较简单,所以我们能一眼看出来,但如果向量的维度比较大、数量比较多,就不方便了。那么有没有系统性的方法,得到这个答案呢?说白了就是有一堆的向量,如何判断它们生成的是几维空间,换句话说就是如何判断最多线性无关的向量有多少个。很简单,将这些向量按照行排列成一个矩阵,并化为行最简模式,非零行的个数就是生成空间的维度。
比如有三个向量,,我们看看它们生成的空间是几维的?
非零行的个数为 2,所以生成空间是二维的。
结论:给出一组向量 ,将这组向量行排列成一个矩阵,并使用高斯消元法进行化简,最终非零行的个数就是这组向量生成的空间的维度,而非零行对应的向量就是生成空间的一组基。
并且这些向量可以看作是矩阵的行向量,因此这些向量生成的空间也叫做矩阵的行空间(Row Space);那么同理,如果是矩阵的列向量生成的空间,那么叫矩阵的列空间(Column Space)。
目前我们只需要关注行空间即可,它的求解过程就是上面说的那样,将矩阵化为行最简模式,非零行的数量就是行空间的维度。说白了,如果把它看作是齐次线性方程组的系数的话,那么非零行的个数就是方程组的约束的个数。但现在有一个更专业的名称,非零行的个数我们也称为矩阵的行秩(Row Rank),所以行空间的维度就是矩阵的行秩(反之亦然)。
列空间与矩阵的列秩
将矩阵化成行最简模式,非零行的数量就是矩阵的行秩,也是矩阵的行向量生成的空间(矩阵的行空间)的维度。既然有行空间和行秩,那么就有列空间和列秩,矩阵的列向量生成的空间就叫矩阵的列空间,列空间的维度就叫做矩阵的列秩。但行秩和列秩的求法还不一样,我们举个例子。
假设有三个向量:,它们生成的空间的维度是多少?首先我们可以将它们行排列,算出矩阵的行秩,便是这些向量生成的空间的维度。但我们也可以将它们按照列来排列,算出矩阵的列秩,也是这些向量生成的空间的维度。
不管是矩阵的行秩(行空间的维度),还是矩阵的列秩(列空间的维度),都是这组向量生成的空间的维度,只是看待的视角不同。那么矩阵的列秩如何求呢?
我们以列的模式组织的话,那么得到的矩阵可以看作是以下方程组的系数矩阵。
然后我们依旧化为行最简模式:
然后我们要找到主元(每一行中最左侧的非零元素),第一行的主元是 1,它位于第一列;第二行全为 0,没有主元;第三行的主元是 1,位于第三列。所以包含主元的列总共有两列,所以矩阵的列秩为 2。
- 一个矩阵的行最简形式的非零行个数,就是矩阵的行秩,也是行空间的维度。
- 一个矩阵的行最简形式的主元列个数,就是矩阵的列秩,也是列空间的维度。
如果把一组向量排成一个矩阵,那么不管是横着排还是竖着排,结果都是一样的。横着排就求行秩,竖着排就求列秩,结果都是这一组向量生成的空间的维度。
如果是行空间,那么所有的非零行就是空间的一组基。那如果是列空间呢?如果获取相应的基呢。首先我们求出了主元列,这里是第一列和第三列,那么原矩阵中的第一列和第三列对应的向量就是空间的一组基,也就是 。
注意:基对应的一定是原矩阵中的列,而不是行最简模式中的列,因为我们是按行化简的,不是按列化简。行最简模式只是让我们求出主元都在哪一列,主元列对应的原矩阵的列才是空间的基。
矩阵的秩
矩阵的行秩和列秩并不是孤立存在的,它们之间有着很优美的联系。
目前我们已经明白了什么是行秩,什么是列秩,然后我们再给出一个结论,就是矩阵的行秩和列秩是相同的。也就是说,不管一组向量它是横着排还是竖着排,都不影响,因为一个矩阵的行秩和列秩相同。并且这个矩阵不一定是方阵,任意形状的矩阵都满足此结论,因此行秩和列秩我们统称为矩阵的秩(Rank)。
然后对于 阶方阵来说,如果它的秩和 相同,那么这个矩阵就是满秩的(Full Rank)。此时:
- 行最简形式的非零行个数为 ;
- 行最简形式的主元列个数为 ;
而对于一个满秩的方阵在化为行最简模式之后,得到的一定是单位矩阵。
然后来看看如何用 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
"""
非常简单,一个函数就搞定了。
如果觉得文章对您有所帮助,可以请囊中羞涩的作者喝杯柠檬水,万分感谢,愿每一个来到这里的人都生活愉快,幸福美满。
微信赞赏
支付宝赞赏
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.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