线性代数的很多内容都与向量和矩阵的运算有关,而矩阵有许多不同的类型。
在刚开始学习线性代数时,尤其是在与机器学习相关的部分,有一些类型的矩阵你可能会反复遇到。
在本教程中,你将发现一系列在线性代数领域中可能会在机器学习中遇到的不同类型的矩阵。
完成本教程后,您将了解:
- 方阵、对称矩阵、三角矩阵和对角矩阵,这些矩阵的特性正如其名。
- 单位矩阵除了主对角线上的值为1外,其余所有值都为0。
- 正交矩阵推广了向量垂直的概念,并具有有用的计算特性。
用我的新书《机器学习线性代数》启动你的项目,书中包含所有示例的分步教程和 Python 源代码文件。
让我们开始吧。
- 2018年2月更新:修正了正交矩阵等价方程中的一个小拼写错误。

线性代数中矩阵类型的简明介绍
照片由 Tony 拍摄,保留部分权利。
教程概述
本教程分为6个部分,涵盖主要的矩阵类型;它们是:
- 方阵
- 对称矩阵
- 三角矩阵
- 对角矩阵
- 单位矩阵
- 正交矩阵
在机器学习线性代数方面需要帮助吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
方阵
方阵是指行数(n)等于列数(m)的矩阵。
1 |
n = m |
与方阵相对的是矩形矩阵,其行数和列数不相等。
由于行数和列数相等,其维度通常表示为n,例如 n x n。矩阵的大小称为阶,因此一个4阶方阵是 4 x 4。
矩阵中从左上角到右下角的对角线上的值向量称为主对角线。
下面是一个3阶方阵的示例。
1 2 3 |
1, 2, 3 M = (1, 2, 3) 1, 2, 3 |
方阵可以方便地进行加法和乘法运算,是许多简单线性变换的基础,例如旋转(如图像旋转)。
对称矩阵
对称矩阵是一种方阵,其右上三角部分与左下三角部分相同。
毫不夸张地说,对称矩阵S是世界上最重要的矩阵——无论是在线性代数理论中,还是在应用中。
— 第338页, 《线性代数导论》,第五版,2016年。
要成为对称矩阵,对称轴始终是矩阵的主对角线,即从左上角到右下角。
下面是一个5×5对称矩阵的示例。
1 2 3 4 5 |
1, 2, 3, 4, 5 2, 1, 2, 3, 4 M = (3, 2, 1, 2, 3) 4, 3, 2, 1, 2 5, 4, 3, 2, 1 |
对称矩阵总是方阵,并且等于其自身的转置。
1 |
M = M^T |
三角矩阵
三角矩阵是一种方阵,其右上或左下部分的所有值均为零,其余元素则填充有非零值。
只有主对角线上方有值的三角矩阵称为上三角矩阵。而只有主对角线下方有值的三角矩阵称为下三角矩阵。
下面是一个3×3上三角矩阵的示例。
1 2 3 |
1, 2, 3 M = (0, 2, 3) 0, 0, 3 |
下面是一个3×3下三角矩阵的示例。
1 2 3 |
1, 0, 0 M = (1, 2, 0) 1, 2, 3 |
LU分解将一个给定矩阵分解为上三角矩阵和下三角矩阵。
NumPy提供了从现有方阵计算三角矩阵的函数。tril()函数用于从给定矩阵计算下三角矩阵,triu()函数用于计算上三角矩阵。
下面的示例定义了一个3×3方阵,并从中计算出下三角矩阵和上三角矩阵。
1 2 3 4 5 6 7 8 9 10 |
# 三角矩阵 from numpy import array from numpy import tril from numpy import triu M = array([[1, 2, 3], [1, 2, 3], [1, 2, 3]]) print(M) lower = tril(M) print(lower) upper = triu(M) print(upper) |
运行该示例会打印出定义的矩阵,然后是下三角矩阵和上三角矩阵。
1 2 3 4 5 6 7 8 9 10 11 |
[[1 2 3] [1 2 3] [1 2 3]] [[1 0 0] [1 2 0] [1 2 3]] [[1 2 3] [0 2 3] [0 0 3]] |
对角矩阵
对角矩阵是指主对角线(从矩阵左上角到右下角)以外的值都为零的矩阵。
对角矩阵通常用变量D表示,可以表示为完整的矩阵或主对角线上的值向量。
对角矩阵主要由零组成,只有主对角线上有非零项。
— 第40页, 《深度学习》,2016年。
下面是一个3×3方形对角矩阵的示例。
1 2 3 |
1, 0, 0 D = (0, 2, 0) 0, 0, 3 |
作为一个向量,它将表示为:
1 |
d = (d11, d22, d33) |
或者,使用指定的标量值:
1 |
d = (1, 2, 3) |
对角矩阵不一定是方阵。在矩形矩阵的情况下,对角线将覆盖最短的维度;例如:
1 2 3 4 5 |
1, 0, 0, 0 0, 2, 0, 0 D = (0, 0, 3, 0) 0, 0, 0, 4 0, 0, 0, 0 |
NumPy提供了diag()函数,可以从现有矩阵创建对角矩阵,或者将向量转换为对角矩阵。
下面的示例定义了一个3×3方阵,提取主对角线作为一个向量,然后从提取的向量创建一个对角矩阵。
1 2 3 4 5 6 7 8 9 10 11 |
# 对角矩阵 from numpy import array from numpy import diag M = array([[1, 2, 3], [1, 2, 3], [1, 2, 3]]) print(M) # 提取对角向量 d = diag(M) print(d) # 从向量创建对角矩阵 D = diag(d) print(D) |
运行该示例首先打印定义的矩阵,然后是主对角线的向量以及由该向量构造的对角矩阵。
1 2 3 4 5 6 7 8 9 |
[[1 2 3] [1 2 3] [1 2 3]] [1 2 3] [[1 0 0] [0 2 0] [0 0 3]] |
单位矩阵
单位矩阵是一种方阵,当与向量相乘时不会改变该向量。
单位矩阵的值是已知的。主对角线(从左上到右下)上的所有标量值都为1,而所有其他值都为零。
单位矩阵是当我们用它乘以任何向量时,都不会改变该向量的矩阵。
— 第36页, 《深度学习》,2016年。
单位矩阵通常用符号“I”或带有维度“In”表示,其中n是表示方阵维度的下标。在某些记法中,单位矩阵可能被称为单位矩阵(unit matrix)或“U”,以纪念其包含的值1(这与酉矩阵不同)。
例如,一个大小为3或I3的单位矩阵如下:
1 2 3 |
1, 0, 0 I = (0, 1, 0) 0, 0, 1 |
在NumPy中,可以使用identity()函数创建指定大小的单位矩阵。
下面的示例创建了一个I3单位矩阵。
1 2 3 4 |
# 单位矩阵 from numpy import identity I = identity(3) print(I) |
运行该示例会打印出创建的单位矩阵。
1 2 3 |
[[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]] |
单独来看,单位矩阵本身并不那么有趣,但它是其他重要矩阵运算(如矩阵求逆)的一个组成部分。
正交矩阵
当两个向量的点积等于零时,它们是正交的,称为正交规范(orthonormal)。
1 |
v . w = 0 |
或者
1 |
v . w^T = 0 |
当我们考虑到一条线与另一条线垂直时,它们是正交的,这一点就变得很直观了。
正交矩阵是一种方阵,其列和行都是正交规范单位向量,例如,它们是相互垂直的,并且长度或模为1。
正交矩阵是一个方阵,其行向量相互正交规范,其列向量也相互正交规范。
— 第41页, 《深度学习》,2016年。
正交矩阵通常用大写字母“Q”表示。
与正交矩阵相乘会保持长度不变。
— 第277页, 《线性代数傻瓜书》,2017年
正交矩阵的正式定义如下:
1 |
Q^T . Q = Q . Q^T = I |
其中Q是正交矩阵,Q^T表示Q的转置,I是单位矩阵。
一个矩阵是正交的,如果它的转置等于它的逆矩阵。
1 |
Q^T = Q^-1 |
正交矩阵的另一个等价条件是,如果矩阵与自身的点积等于单位矩阵。
1 |
Q . Q^T = I |
正交矩阵常用于线性变换,如反射和置换。
下面列出了一个简单的2×2正交矩阵,它是一个反射矩阵或坐标反射的例子。
1 2 |
1, 0 Q = (0, -1) |
下面的示例创建了这个正交矩阵并检查了上述等价性。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 正交矩阵 from numpy import array from numpy.linalg import inv Q = array([[1, 0], [0, -1]]) print(Q) # 逆矩阵等价性 V = inv(Q) print(Q.T) print(V) # 单位矩阵等价性 I = Q.dot(Q.T) print(I) |
运行该示例,首先打印正交矩阵,然后打印正交矩阵的逆矩阵和转置矩阵,并显示它们是等价的。最后,打印出由正交矩阵与其转置的点积计算出的单位矩阵。
1 2 3 4 5 6 7 8 9 10 11 |
[[ 1 0] [ 0 -1]] [[ 1 0] [ 0 -1]] [[ 1. 0.] [-0. -1.]] [[1 0] [0 1]] |
正交矩阵是很有用的工具,因为计算它们的逆矩阵(即它们的转置)在计算上成本低且稳定。
扩展
本节列出了一些您可能希望探索的扩展本教程的想法。
- 使用你自己设计的小数据修改每个示例。
- 编写自己的函数来实现每个操作。
- 研究一个在机器学习中使用了每种操作的例子。
如果您探索了这些扩展中的任何一个,我很想知道。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
书籍
- 6.2节 特殊类型的矩阵。《线性代数傻瓜书》,2017年。
- 线性代数导论, 2016.
- 2.3节 单位矩阵和逆矩阵,《深度学习》,2016年。
- 2.6节 特殊类型的矩阵和向量,《深度学习》,2016年。
API
文章
总结
在本教程中,你发现了一系列在线性代数领域中可能会在机器学习中遇到的不同类型的矩阵。
具体来说,你学到了:
- 方阵、对称矩阵、三角矩阵和对角矩阵,这些矩阵的特性正如其名。
- 单位矩阵除了主对角线上的值为1外,其余所有值都为0。
- 正交矩阵推广了向量垂直的概念,并具有有用的计算特性。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
我真的很喜欢你的教程
谢谢!