线性代数之矩阵篇

继续接着上一篇《人工智能-线性代数之向量篇》的内容来学习汇总下一篇,在这一篇中,我们开始汇总学习人工智能中线性代数最最最重要的一部分,那就是矩阵的运算,几乎所有人工智能机器学习的算法都离不开矩阵的运算,换句话说,就是所有的人工智能都是基于大量的数据在矩阵中进行各种庞杂而基础的运算和变换,从而找出其中的规律,最后训练出数学模型的。

文章目录

  • 线性代数之矩阵篇
    • 1. 矩阵的定义
    • 2. 矩阵的计算
      • 2.1 加法
      • 2.2 与数相乘
      • 2.3 乘法
      • 2.4 转置
    • 3. 特殊的矩阵
      • 3.1 对称矩阵
      • 3.2 单位矩阵
      • 3.3 逆矩阵
      • 3.4 奇异矩阵
    • 4. 线性方程组
      • 4.1 行阶梯矩阵
      • 4.2 矩阵的轶
    • 5. 线性组合和线性相关
    • 6. python计算代码

1. 矩阵的定义

在数学中,矩阵是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。例如:A=[−1324]A=\begin{bmatrix} -1 &3\\ 2 &4\\ \end{bmatrix}A=[−12​34​] ,这是一个两行两列矩阵,其中的元素可以用小写字母加下标来表示,如a11=−1,a12=3a_{11}=-1 \;,a_{12}=3a11​=−1,a12​=3

2. 矩阵的计算

2.1 加法

A=[2−120],B=[2235]A=\begin{bmatrix} 2 &-1\\ 2 &0\\ \end{bmatrix}, B=\begin{bmatrix} 2 &2\\ 3 &5\\ \end{bmatrix} A=[22​−10​],B=[23​25​]
A+B=[2+2(−1)+22+30+5]=[4155]A+B=\begin{bmatrix} 2+2 &(-1)+2\\ 2+3 &0+5\\ \end{bmatrix}= \begin{bmatrix} 4 &1\\ 5 &5\\ \end{bmatrix} A+B=[2+22+3​(−1)+20+5​]=[45​15​]
符合加法交换律:A+B=B+AA+B=B+AA+B=B+A

2.2 与数相乘

A=[2−120],λ∈R,Aλ=[2λ−1λ2λ0λ]A=\begin{bmatrix} 2 &-1\\ 2 &0\\ \end{bmatrix},\lambda \in R, A\lambda = \begin{bmatrix} 2\lambda &-1\lambda\\ 2\lambda &0\lambda\\ \end{bmatrix} A=[22​−10​],λ∈R,Aλ=[2λ2λ​−1λ0λ​]

2.3 乘法

矩阵A和矩阵B相乘,必须满足A的列数等于B的行数,否则无法相乘。规律:Am×nBp×q=Cm×qA_{m\times n}B_{p\times q}=C_{m\times q}Am×n​Bp×q​=Cm×q​,例如[两行三列] X [三行两列] = [两行两列] 即:A2×3B3×2=C2×2A_{2\times 3}B_{3\times 2}=C_{2\times 2}A2×3​B3×2​=C2×2​

A=[322−205],B=[−131225]A=\begin{bmatrix} 3 &2&2\\ -2 &0&5\\ \end{bmatrix},B=\begin{bmatrix} -1 &3\\ 1 &2\\ 2 &5\\ \end{bmatrix} A=[3−2​20​25​],B=⎣⎡​−112​325​⎦⎤​
A×B=[3×(−1)+2×1+2×23×3+2×2+2×5(−2)×(−1)+0×1+5×2(−2)×3+0×2+5×5]=[3231219]A\times B=\begin{bmatrix} 3\times (-1)+2\times1+2\times2 &3\times3+2\times2+2\times5\\ (-2)\times(-1)+0\times1+5\times2 &(-2)\times3+0\times2+5\times5\\ \end{bmatrix}=\begin{bmatrix} 3 &23\\ 12 &19\\ \end{bmatrix} A×B=[3×(−1)+2×1+2×2(−2)×(−1)+0×1+5×2​3×3+2×2+2×5(−2)×3+0×2+5×5​]=[312​2319​]
满足结合律和分配率。

2.4 转置

矩阵的转置就是行列互换,用ATA^TAT表示A的转置矩阵。
A=[123456],AT=[142536]A=\begin{bmatrix} 1 &2&3\\ 4 &5&6\\ \end{bmatrix},A^T=\begin{bmatrix} 1 &4\\ 2 &5\\ 3 &6\\ \end{bmatrix} A=[14​25​36​],AT=⎣⎡​123​456​⎦⎤​
转置的运算规则
(AT)T=A(AB)T=BTAT(A+B)T=AT+BT(A^T)^T=A\qquad(AB)^T=B^TA^T\qquad(A+B)^T=A^T+B^T(AT)T=A(AB)T=BTAT(A+B)T=AT+BT

3. 特殊的矩阵

3.1 对称矩阵
  • 一个矩阵转置后等于原矩阵,就是对称矩阵。
  • 一个矩阵的转置和这个矩阵的乘积就是一个对称矩阵
  • 两个对称矩阵相加,仍然得到对称矩阵
3.2 单位矩阵

一个nxn矩阵,主对角线上的元素都是1,其余元素都是0的,就是单位矩阵。
A=[1001],B=[100010001]A=\begin{bmatrix} 1 &0\\ 0 &1\\ \end{bmatrix}, B=\begin{bmatrix} 1 &0 &0\\ 0 &1 &0\\ 0 &0 &1\\ \end{bmatrix} A=[10​01​],B=⎣⎡​100​010​001​⎦⎤​
一个矩阵与其对应的单位矩阵的乘积仍然是这个矩阵。Am×nIn×n=Am×nA_{m\times n}I_{n\times n}=A_{m\times n}Am×n​In×n​=Am×n​,Am×nIm×m=Am×nA_{m\times n}I_{m\times m}=A_{m\times n}Am×n​Im×m​=Am×n​,其中I为单位矩阵。

3.3 逆矩阵

一个矩阵A,它的倒数记作A−1A^{-1}A−1,只有方阵才有逆矩阵,AAA与A−1A^{-1}A−1的乘积是单位矩阵。
计算公式,假设A和B都可逆,则(AB)−1=B−1A−1(AB)^{-1}=B^{-1}A^{-1}(AB)−1=B−1A−1
如果A是可逆矩阵,则A转置的逆等于逆的转置。

3.4 奇异矩阵

一句话,就是没有逆矩阵的矩阵。A=[1122]A=\begin{bmatrix} 1 &1\\ 2 &2\\ \end{bmatrix}A=[12​12​],它就没有逆矩阵。

4. 线性方程组

方程组可以化成增广矩阵,用消元法或向量法求解方程组,消元法类似常规解代数方程无区别。向量法通过求逆矩阵的方式求解。
{x+2y+z=83x+7y+2z=232x+2y+z=9⟹[1218372232219]\left\{ \begin{aligned} x+2y+z =8 \\ 3x+7y+2z =23 \\ 2x+2y+z =9 \\ \end{aligned} \right.\Longrightarrow \left[ \begin{array}{ccc|c} 1 & 2 & 1 & 8\\ 3 & 7 & 2 & 23\\ 2 & 2 & 1 & 9\\ \end{array} \right] ⎩⎪⎨⎪⎧​x+2y+z=83x+7y+2z=232x+2y+z=9​⟹⎣⎡​132​272​121​8239​⎦⎤​
向量法求解推导:
[121372221]⏟A[xyz]⏟x[8239]⏟b\underbrace{\begin{bmatrix} 1 &2 &1\\ 3 &7 &2\\ 2 &2 &1\\ \end{bmatrix}}_A\underbrace{\begin{bmatrix} x \\ y \\ z \\ \end{bmatrix}}_x\underbrace{\begin{bmatrix} 8 \\ 23 \\ 9 \\ \end{bmatrix}}_b A⎣⎡​132​272​121​⎦⎤​​​x⎣⎡​xyz​⎦⎤​​​b⎣⎡​8239​⎦⎤​​​
从而得出推导出:Ax=b⇒A−1Ax=A−1b⇒x=A−1bAx =b\quad\Rightarrow \quad A^{-1}Ax=A^{-1}b\quad\Rightarrow \quad x=A^{-1}bAx=b⇒A−1Ax=A−1b⇒x=A−1b

然后就可以通过除法运算得出方程的解了 x=A−1b=bA=[123]x=A^{-1}b=\frac{b}{A}=\begin{bmatrix} 1 \\ 2 \\ 3 \\ \end{bmatrix}x=A−1b=Ab​=⎣⎡​123​⎦⎤​

由此我们可以得出,如果A是奇异矩阵,则它没有逆矩阵,所以方程组将无解。

4.1 行阶梯矩阵

满足一下条件的成为行阶梯矩阵:

  1. 如果有全零行,则全0行在最下方。
  2. 从行上看,从走边起,出现连续0的个数自上而下严格递增
    如果还满足,台角位置元素为1,台角正上方元素全为0,则称为最简行阶梯矩阵。
    A=[2013−40−518−400071100000],A=[1013−40118200011100000]A=\begin{bmatrix} 2 &0 &1 &3 &-4 \\ 0 &-5 &1 &8 &-4 \\ 0 &0 &0 &7 &11 \\ 0 &0 &0 &0 &0 \\ \end{bmatrix}, \quad A=\begin{bmatrix} 1 &0 &1 &3 &-4 \\ 0 &1 &1 &8 &2 \\ 0 &0 &0 &1 &11 \\ 0 &0 &0 &0 &0 \\ \end{bmatrix}A=⎣⎢⎢⎡​2000​0−500​1100​3870​−4−4110​⎦⎥⎥⎤​,A=⎣⎢⎢⎡​1000​0100​1100​3810​−42110​⎦⎥⎥⎤​
4.2 矩阵的轶

台角的个数,或者阶梯数,就是矩阵的轶,如果矩阵的轶是3,则记作r(A)=3,矩阵的阶梯数就是矩阵中独立向量的个数,如果矩阵的轶是3,那么通过一系列变换,就能转换为有3个阶梯的行阶矩阵,进而转换为最简行阶矩阵。独立向量,就是矩阵中一个不能通过其他向量的线性组合表示的向量。
对于An×nA_{n \times n}An×n​,若r(A)=n,则称A为满轶矩阵,则A是可逆矩阵,是非奇异矩阵,满轶矩阵或矩阵可逆是方程组有唯一解的判断依据。

5. 线性组合和线性相关

  • 线性组合
    如果v1,v2,⋯,vnv_1,v_2,\cdots,v_nv1​,v2​,⋯,vn​是n维向量,且vi∈Rnv_i\in R^nvi​∈Rn,那么t1v1+t2v2+⋯tnvnt_1v_1+t_2v_2+\cdots t_nv_nt1​v1​+t2​v2​+⋯tn​vn​就是v1,v2,⋯,vnv_1,v_2,\cdots,v_nv1​,v2​,⋯,vn​的线性组合。线性组合包括数乘和加法,且只有同阶向量,才涉及线性组合。
  • 线性相关
    如果两个向量是线性相关的,则它们中的一个可以用另一个的线性组合表示。
    如果存在一个集合S=v1,v2,⋯,vnS={v_1,v_2,\cdots,v_n}S=v1​,v2​,⋯,vn​,当这个集合满足t1v1+t2v2+⋯+tnvn=Ot_1v_1+t_2v_2+\cdots+t_nv_n=Ot1​v1​+t2​v2​+⋯+tn​vn​=O时,S中的向量是线性相关的。,其中O是零向量,ti∈R,tit_i\in R, t_iti​∈R,ti​不全为0.

6. python计算代码

数学归根结底其实是一种思想,像计算这种累活儿就可以全交给计算机了,你只要把思想怎么算告诉它就可以了。

import numpy as npif __name__ == '__main__':# 生成4x3矩阵,默认[0,1)随机浮点数a_4_3 = np.random.random((4, 3))# 生成4x3矩阵,范围[1,12)a_4_3int = np.random.randint(1, 12, (4, 3))# 生成4x3矩阵,元素都是1a_1 = np.ones((4, 3))# 生成4x3矩阵,元素都是0a_0 = np.zeros((4, 3))# 生成4x3矩阵,范围[2,25),步长是2a_range = np.mat(np.arange(2, 25, 2)).reshape(4, 3)# 自定义3x3矩阵a_self = np.mat('1 2 3;4 5 6; 7 8 9')# 矩阵输出print('a=\n{}'.format(a_4_3))print('a=\n{}'.format(a_4_3int))print('a=\n{}'.format(a_1))print('a=\n{}'.format(a_0))print('a=\n{}'.format(a_range))print('a=\n{}'.format(a_self))# 获取矩阵的行列数m, n = np.shape(a_self)print('this is a %d x %d matrix' % (m, n))# 访问第一行第一列,访问第2行第3列a_11, a_23 = a_self[0, 0], a_self[1, 2]print(a_11, a_23)# 访问第2行a_row2 = a_self[1]print(a_row2)# 访问第二列a_col2 = a_self[:, 2]print(a_col2)a = np.mat('3 2 2; -2 0 5')b = np.mat('-1 3;1 2; 2 5')# 加法result = np.add(a, a)print(result)# 减法result = np.subtract(a, a)print(result)# 数乘result = np.multiply(b, 2)print(result)# 乘法result = np.dot(a, b)print(result)# 转置c = np.transpose(b)print(c)# 定义一个4x4的单位矩阵e = np.eye(4, 4)print(e)a = np.mat('1 2;3 4')# 求a的逆矩阵a_ni = np.linalg.inv(a)print(a_ni)result = np.dot(a, a_ni)result = np.around(result, decimals=1)print(result)# 求解方程组A = np.mat(' 1 2 1; 3 7 2; 2 2 1')b = np.mat('8;23;9')result = np.dot(A**-1, b)print(result)# 求矩阵的轶result = np.linalg.matrix_rank(A)print(result)

人工智能-线性代数之矩阵篇相关推荐

  1. 矩阵乘法 算法训练 试题_线性代数入门——矩阵乘法的定义及其意义

    系列简介:这个系列文章讲解线性代数的基础内容,注重学习方法的培养.线性代数课程的一个重要特点(也是难点)是概念众多,而且各概念间有着千丝万缕的联系,对于初学者不易理解的问题我们会不惜笔墨加以解释.在内 ...

  2. 线性代数之 矩阵求导(2)标量函数求导基本法则与公式

    线性代数之 矩阵求导(2)基本法则与公式 前言 基本约定 标量对向量求导 基本法则 公式 标量对矩阵求导 基本法则 公式 后记 前言 上篇矩阵求导(1)解决了求导时的布局问题,也是矩阵求导最基础的求导 ...

  3. 线性代数之 矩阵求导(4)矩阵微分,迹与求导

    线性代数之 矩阵求导(4)迹与矩阵求导 前言 矩阵微分定义 矩阵微分计算法则 常矩阵 线性 乘积 转置 迹 通过矩阵微分进行求导 常用的矩阵微分 后记 前言 本次将记录如何进行矩阵求导(标量对矩阵). ...

  4. Codeforces 947E Perpetual Subtraction (线性代数、矩阵对角化、DP)

    Codeforces 947E Perpetual Subtraction (线性代数.矩阵对角化.DP) 手动博客搬家: 本文发表于20181212 09:37:21, 原地址https://blo ...

  5. 线性代数之矩阵逆的微分

                                线性代数之矩阵逆的微分 矩阵微分 类似矩阵导数的定义,则矩阵微分的形式见下: 矩阵逆的微分 这里假设X是个可逆(非奇异)的矩阵,求其可逆矩阵的微 ...

  6. 线性代数之矩阵导数微分

                               线性代数之矩阵导数微分 矩阵微分及性质 矩阵微分的形式见下: 类似函数的微分,矩阵微分有如下性质: 其中矩阵转置的微分等于矩阵微分的转置: 矩阵导 ...

  7. 线性代数之矩阵偏导续

                                线性代数之矩阵偏导续 矩阵偏导 针对y或者f(x)是元素,x是矩阵的情况,则元素对矩阵的求导形式如下: 那么由这个定义则有: 证明有两种方法:一 ...

  8. 线性代数之矩阵标准型的求法

                             线性代数之矩阵化成标准型的求法 初等变换法 已知矩阵A    求其该矩阵的标准型. 总结 Step1:先对矩阵A仅以初等行变换转换为简化阶梯型 Ste ...

  9. python矩阵运算与线形代数_[译] 线性代数:矩阵基本运算

    线性代数:矩阵基本运算 在本文中,我们将介绍矩阵的大部分基本运算,依次是矩阵的加减法.矩阵的标量乘法.矩阵与矩阵的乘法.求转置矩阵,以及深入了解矩阵的行列式运算.本文将不会涉及逆矩阵.矩阵的秩等概念, ...

最新文章

  1. [MATLAB]从已知矩阵中取出子阵
  2. Redis M/S + Keepalived 主从备份高可用
  3. [flex]报错,Resource Path Location Type 源路径条目“… Unknown Flex 问题
  4. 基金指数温度怎么算_成都冬季想装明装暖气片那究竟价格应该怎么算?
  5. 理解 JavaScript 闭包
  6. python协程--yield和yield from
  7. Apache2.2整合PHP5.2
  8. 24. Declear non-member functions when type conversions should apply to all parameters
  9. python贪心算法几个经典例子_Python笔试——贪心算法
  10. html+css+javascript实现乾坤八卦风水罗盘时钟 (免费附源码)
  11. Linux上Meson安装及使用
  12. 201621123062《java程序设计》第11周作业总结
  13. win7添加一个计算机图标,Win7系统任务栏添加计算机图标的步骤图解
  14. pytorch实现GAN
  15. html5关键语句,怎样把握文中的关键语句
  16. 怎样取消Windows 10的虚拟桌面切换动画和窗口动画
  17. 人人皆可二次元!小姐姐生成不同风格动漫形象,肤色、发型皆可变
  18. 《烟花》个人深度解读
  19. 长大后才知道,成年人的哭原来没有声音
  20. 一口气发布十大建网利器,华为打算煲出怎样的5G味道?

热门文章

  1. 字符串反转(把一个字符串按相反的顺序输出)的三种简单方法
  2. 讲个笑话,我工作3年天天人肉提数,还不如一个应届生!
  3. MFNet——向具有多光谱场景的自动驾驶汽车的实时语义分割
  4. 4个步解答如何让用户更好地生产内容
  5. 牙科植入物市场现状及未来发展趋势
  6. 零时科技 || BEGO Token 攻击事件分析
  7. 管理会计报告和财务报告的区别
  8. 值得销售人员看的书籍
  9. 在WPF中加载gif动态图片
  10. 压缩后图片不清楚了怎么办?