线性代数的28法则:作为程序员掌握这些API就够用了……
《程序员的数学3:线性代数》
1. 向量 & 矩阵
向量(数组)的元素类型可以通过dtype属性获得。上面例子中的参数序列的元素都是整数,因此所创建的数组的元素类型也是整数,并且是32bit的长整型。可以通过dtype参数在创建时指定元素类型:
对,向量与 np.ndarray
不是同一个东西——向量就是一维数组。在几何意义上,向量表示的是多维空间中的有向线段,数组的每个数据代表了一个维度的参数。
而 ndarray
可以是多维数组,更像是Matrix。
1.1. 问: np.ndarray
与 np.matrix
的区别
1.2. 向量空间
把上图中的刻度去掉,就是向量空间。
2. 算术运算
注意:numpy.ndarray的乘积运算,并不等同于线性代数中两个向量的乘积运算。
2.1. 为什么线性代数定义的乘积运算不按照加法的规则(按位相乘)进行?
线性代数的乘法运算(矩阵乘积),几何意义表示坐标系变换。
2.2. 数组广播(broadcasting)
对于不同大小的矩阵,只有两个矩阵的维度同为1时(例如矩阵只有一列或一行),我们才能进行这些算术运算,在这种情况下,NumPy使用广播规则(broadcast)进行操作处理:
3. 矩阵乘积
3.1. 矩阵与向量的乘积
两种情形:
矩阵 * 列向量 = 新向量(列)
在这个过程中,向量代表的是一个有向线段,而矩阵则表示一个转换坐标系(或者称之为“线性的函数映射”),通过乘法运算后,向量被映射成了另一个坐标系中的样子。
所以,看懂了矩阵乘积,就能明白矩阵的本质——“矩阵就是映射”。
3.1.1. 除了坐标转换,矩阵乘积还有什么用?
3.1.2. 矩阵 * 矩阵
矩阵之间相乘,其本质就是映射的合成。
其实上述公式可以做如下转换:
这是啥?其本质就是:
读懂这个本质,就能知道,矩阵乘法符合结合律:
C(BA) = (CB)A
但不符合交换律:
为什么矩阵乘法不符合交换律?
考虑A是一个旋转的坐标变换,而B则代表横向拉伸。那么先旋转后拉伸与先拉伸后旋转,结果当然不同。
3.1.3. 一些特例
4. 点积乘法
5. 特殊矩阵
零矩阵
零矩阵表示的映射是所有点都映射到原点的映射。
单位矩阵
“什么都没变”的映射。
对角矩阵
对角矩阵表示的映射是“沿着坐标轴伸缩”,其中对角元素就是各轴伸缩的倍率。
分块矩阵
正交矩阵
对称矩阵
5.1. 转置矩阵
5.1.1. 共轭转置
6. 用矩阵表示各种关系
6.1. 高阶差分
6.2. 高阶微分
6.3. 消除常数项
7. 行列式
行列式求得的是一个数,几何意义为(面积、体积...)的扩大率。
行列式只针对方阵而言,非方阵矩阵不存在行列式。
7.1. 行列式的性质
常数乘法不变性
转置矩阵的行列式
多重线性
注意:多重性质都是针对1列定义的:
交替性
7.2. 行列式的计算
from numpy import linalg
n = linalg.det(A)
8. 逆矩阵 & 秩
如果 y = Ax + b
为 顺问题
,那么,通过 y 求得 x 的问题就是 逆问题
。
逆矩阵就是把矩阵A映射的向量还原回去的映射。简单的说,就是“逆映射”。
- 正则矩阵:存在逆矩阵的方阵(可逆矩阵,非奇异矩阵)
- 奇异矩阵:反之~
8.1. 逆矩阵的性质
8.2. 对角矩阵的逆矩阵
8.3. 求解逆矩阵(numpy)
from numpy import linalg
invA = linalg.inv(A)
8.4. 秩
秩,体现的是不相关的维度数。
8.4.1. “秩”是图像经过矩阵变换之后的空间维度
- 如果经过矩阵
A
变换后的结果是一个平面,空间没有被压缩扁平化,那么该转换可逆,称为非奇异矩阵 - 非奇异矩阵的秩与列数相等,称之为满秩(Full Rank)矩阵
- 对于满秩矩阵来说, 变换后唯一落在原点的就是零向量本身
- 当变换的结果是一条直线,该矩阵是一维的,
rank(A) = 1
,此时矩阵不可逆, 称为奇异矩阵 - 非满秩矩阵,会将空间压缩到更低的一维直线上,也就是由嫩绿色直线上一系列的向量在变换后成为零向量
- 当变换的结果是压缩到原点,则该矩阵是零维的,称
rank(A) = 0
8.4.2. “秩”是列空间的维度
“秩”就是矩阵所代表空间的不相关的维度数量。而不相关的的维度才构成空间,所以,“秩”代表空间的维度。
8.4.3. 话说回来,为啥叫做“秩”
举个例子就很容易理解,大家排队买票。如果大家互相不认识,那就会一个排一个,非常有秩序。然而,如果突然来了一个与队伍前面的人认识的人,这个人又不自觉,非要插队。那后面的人肯定要有意见了,说你要是这样我前面还有认识的人呢,你插我也插,这样整个队伍就乱掉了,谁也买不成。
通过这个例子,可得以下结论:彼此不认识,那就不相关,就有秩序,问题就好解决;反之,彼此相关,就没有秩序,问题就不好解决。
所以,数学家们定义,矩阵中的最大的不相关的向量的个数,就叫秩,可以理解为有秩序的程度。
从社会学的角度在考虑一下,政府机关是讲人际关系的地方,可谓是关系错综复杂,通常都是近亲繁殖。显然,这些部门,用矩阵来说,就不满秩,秩非常小。可以想象这些地方的工作肯定是搞不好的,因为没有秩序。所以想找个好单位,满秩可以作为一项评价指标哦~
8.4.4. 求解秩(numpy)
from numpy import linalg
n = linalg.matrix_rank(A)
8.5. 维数定理
向量空间的维数等于对应矩阵的秩
两个有限维子空间的和的维数定理:
dim(U1+U2) = dimU1 + dimU2 - dim(U1 ∩ U2)
两个有限集合元素个数的容斥原理:
card(U1∪U2) = cardU1 + cardU2 - card(U1 ∩ U2)
9. 线性方程组
10. 特征值 & 特征向量
线性代数的28法则:作为程序员掌握这些API就够用了……的更多相关文章
- 工资8000以下的Android程序员注意了!接下来要准备面对残酷现实了……
最近在知乎看到一个测试,特扎心: 以下三种情况,哪个最让你绝望? ❶ 每月工资去掉开销还存不到3千: ❷ 家人突然急病住院,医药费10万: ❸ 同班的家长都在争先恐后给孩子报名各种辅导班.兴趣班,但一 ...
- Oracle学习总结(8)—— 面向程序员的数据库访问性能优化法则
特别说明: 1. 本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2. 本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...
- 挨踢职场求生法则-----我在IT职场打滚超过15年了,从小小的程序员做到常务副总
摘要我在IT职场打滚超过15年了,从小小的程序员做到常务副总.相对于其它行业,IT职场应该算比较光明的了,但也陷阱重重,本文说说我的亲身体会,希望大家能在IT职场上战无不胜! 通用法则 法则1:忍耐是 ...
- .Net程序员学用Oracle系列(28):PLSQL 之SQL分类和动态SQL
1.SQL 语句分类 1.1.分类方法及类型 1.2.数据定义语言 1.3.数据操纵语言 1.4.其它语句 2.动态 SQL 理论 2.1.动态 SQL 的用途 2.2.动态 SQL 的语法 2.3. ...
- 程序员的软实力武器-star法则
hhh 程序员的表达能力一直被诟病,尤其面试讲述自己的项目的时候 下面的star原则能够帮助你: 所谓STAR原则,即Situation(情景).Task(任务).Action(行动)和Result( ...
- GitHub 热点速览 Vol.28:有品位程序员的自我修养
作者:HelloGitHub-小鱼干 摘要:一个程序员除了技术好,还得品位高,有什么比一个高颜值的 GUI 更能体现你品味的呢?rocketredis 就是一个高颜值.简约的 Redis 管理界面,比 ...
- MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式
MVC的验证(模型注解和非侵入式脚本的结合使用) @HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客 ...
- (转).net程序员转战android第三篇---登录模块之静态登录
这一篇我将分2个部分记录登录界面,第一部分是静态登录, 这部分将如何从界面布局.控件使用.文件关系.数据验证.登陆实现等5小块记录. 第二部分是动态登录,这块会基于上面的4小块,在数据验证不是静态数据 ...
- C/C++程序员面试大纲
基础篇:操作系统.计算机网络.设计模式一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会写 ...
随机推荐
- kubernetes pod的弹性伸缩———基于pod自定义custom metrics(容器的IO带宽)的HPA
背景 自Kubernetes 1.11版本起,K8s资源采集指标由Resource Metrics API(Metrics Server 实现)和Custom metrics api(Promet ...
- 201771010120 苏浪浪 《面向对象程序设计(java)》第二周学习总结
理论知识总结 第三章Java基本程序设计结构 1.基本知识:(1)标识符:是由字母.下划线.美元符号和数字组成,且第一个符号不能为数字.(2)关键字:剧啊语言中被赋予特定意义的一些单词.(3)注释 2 ...
- COLA的扩展性使用和源码研究
cola扩展点使用和设计初探 封装变化,可灵活应对程序的需求变化. 扩展点使用 步骤: 定义扩展点接口,类型可以是校验器,转换器,实体: 必须以ExtPt结尾,表示一个扩展点. 比如,我定义一个云枢的 ...
- day20 函数闭包与装饰器
装饰器:本质就是函数,功能是为其他函数添加新功能 原则: 1.不修改被装饰函数的源代码(开放封闭原则) 2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式 装饰器的知识储备: 装饰器=高阶函数+ ...
- JVM调优总结(二)-基本垃圾回收算法
可以从不同的的角度去划分垃圾回收算法: 按照基本回收策略分 引用计数(Reference Counting): 比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数. ...
- 【ubuntu】开机一直“/dev/sda3:clean, XXX files, XXXX blocks”解决方法
由于该电脑是实验室公用跑模型的机子,在解决过程中,发现是 cuda 导致一直进不了系统.原因是装了两个不同版本的cuda,一个9.2,另一个10.0,因为是公用的,目前尚不清楚,怎么同时装上两个的,也 ...
- BUUCTF WEB
BUUCTF 几道WEB题WP 今天做了几道Web题,记录一下,Web萌新写的不好,望大佬们见谅○| ̄|_ [RoarCTF 2019]Easy Calc 知识点:PHP的字符串解析特性 参考了一下网 ...
- HttpSession之表单的重复提交 & 验证码
如果采用 HttpServletResponse.sendRedirct() 方法将客户端重定向到成功页面,将不会出现重复提交问题 1.表单的重复提交 1). 重复提交的情况: ①. 在表单提交到一个 ...
- STM32读取Guidance数据——Guidance SDK
更新记录:2019/11/14 更新STM32(F407VET6)读取Guidance数据 Github地址. 背景:想要将祖传的Guidance用于DJI A3/新固件的N3飞控.DJI已经停 ...
- Java实现 蓝桥杯 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个mm行nn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运 ...