linearalgebra.png
矩阵
矩阵在机器学习中重要性就不再多数,在机器学习特别是深度学习中,大部分工作就是对矩阵进行变换和运算。以下内容需要我们掌握的。
- 矩阵运算
- 逆矩阵
- 矩阵的秩
- 初等变换
- SVD 矩阵分解
我们在推荐系统直接就用矩阵来表示用户和物品之间关系,其实矩阵可以理解为一张数表,表示行和列间对应关系。
数表,上面表示 m x n 矩阵,矩阵符号一遍使用大小字母来表示矩阵,但是注意大写 D 留给表示行列式。在大写字母右下角表示矩阵行数和列数例如
矩阵和行列式差别
矩阵是一张数表,而行列式是一个数据,之前我们介绍如何将行列式展开进行计算来得到一个数据。表示方式不同,行列式用两条竖线来表示行列式,而矩阵用括号或方括号来表示矩阵。而且行列式行数和列数是相同,也就是我们在描述行列式通常说 n 阶行列式,而矩阵就更加灵活了,行数和列数可以相等也可以不相等。
其实行列式是方阵的一个属性。
矩阵的分类
- 实矩阵和复矩阵
- 行矩阵和列矩阵
- 零矩阵
- 负矩阵 对于 A 矩阵负矩阵是 -A 表示
- 行数和列数相等就是 n 阶方阵
- 如果一个矩阵
E_5 = np.eye(5)
E_5
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
- 只有一行一列的
- 同型矩阵,也就是行数和列数对应相等的
m_2 = np.ones_like(m_1)
m_2.shape
在 numpy 中,我们通通过矩阵的 shape 属性来查看矩阵形状,这里 like 表示创建全部元素都是 1 与 m_1 形状相同的同型矩阵。
- 矩阵相等前提是同型矩阵
- 这里说只有方阵才有主对角线和次对角线
矩阵运算
矩阵加法
两个矩阵对应元素相加即可
a_1 = np.arange(0,9).reshape((3,3))
a_1
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
a_2 = np.arange(1,10).reshape((3,3))
a_2
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
a_3 = a_1 + a_2
array([[ 1, 3, 5],
[ 7, 9, 11],
[13, 15, 17]])
这里值得强调的是,书上说的只有同型矩阵才能相加减,但是在numpy 中因为 numpy 又一个广播特征,就是 numpy 中矩阵只满足一个维度上与矩阵保持一致,所以可以通过自动广播形式将行或列元素进行复制来保持维度一致。
a_5 = np.array([1,1,1])
a_6 = a_1 + a_5
a_6
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
矩阵的减法
- k(A+ B) = kA + kB
矩阵的数乘
a_7 = 3 * a_1
a_7
array([[ 0, 3, 6],
[ 9, 12, 15],
[18, 21, 24]])
矩阵提取公因子是所有元素均有公因子,公因子外提一次,而行列式是行提取公因子,每一行都需要提取一次。那么行列式所有元素都有公因子,那么所有元素均有外提 n 次。
矩阵的乘法
其实矩阵乘法是
a_1 = np.arange(0,6).reshape(2,3)
a_1
array([[0, 1, 2],
[3, 4, 5]])
a_2 = np.arange(0,6).reshape(3,2)
a_2
array([[0, 1],
[2, 3],
[4, 5]])
a_3 = np.dot(a_1,a_2)
a_3
array([[10, 13],
[28, 40]])
结果矩阵形状,结果矩阵行数等于第一个矩阵的行数,结果矩阵的列数等于矩阵的列数。















网友评论