Python与线性代数基本概念
在Python中使用Numpy创建向量:
x = np.array([1, 2, 3, 4])
创建3 x 3矩阵
B = np.array([[1, 2],[3, 4],[5, 6]])
Shape形状,也可称为维度,表示矩阵中每个维度的具体数值;
B.shape 3 x 2
转置
行向量可转置为列向量,列向量转置为行向量
如为方阵转置后行数列数不变,对于非方阵,2 x 3矩阵转置后为3 x 2矩阵
B_t = A.T
检查转置后形状shape
B_t.shape
矩阵加法
矩阵相加为两个矩阵对应的元素相加;
A = np.array([1,2],[3,4])
B = np.array([4,5],[5,6])
C = A + B = [[5, 7],[8, 10]]
如标量与矩阵相加规则为:标量与矩阵中对应的每个元素相加;
广播
广播为Numpy的机制,使得Numpy可以处理各个不同形状(shape)之间的操作,较小的阵列将会被扩充以匹配较大的阵列形状;
就如上面使用标量与矩阵做相加元素,实际上Numpy把标量转成了与矩阵相同维度的矩阵与该矩阵进行相加;
比如一个3 x 2 矩阵与一个3 x 1矩阵相加,Numpy会自动把3 x 1矩阵复制一列形成3 x2矩阵与该3 x 2矩阵相加,使得两个矩阵的shape能够匹配;
矩阵乘法
矩阵乘法与矩阵加法规则并不一样,不是两个矩阵对应的元素相乘,而是计算矩阵行与列对应元素乘积之和;也称为点积;
矩阵乘法是否有定义,前一个矩阵的列数必须等于后一个矩阵的行数;如n x p与p x m两个矩阵相乘结果为n x m矩阵;
两个矩阵相乘可以看作是第一个矩阵的每一行与第二个矩阵的每一列之间的点积;
可以使用Numpy的dot()函数计算两个矩阵的乘积;
A = [[2, 3],[3, 4]]
B = [[1, 1],[3, 4]]
C = np.dot(A, B)
也可以使用 C =A.dot(B)
线性方程组
线性方程组为线性代数用来解决的重要问题之一,
x1 – 2*x2+x3 = 0
2*x2 - 8*x3 = 8
-4*x1 + 5*x2 + 9*x3 = -9
矩阵B每行为上述方程的常数,A矩阵每行为方程组中的每个方程系数;
A = np.array([[1 ,-2 ,1],[0 ,2 ,-8],[-4 ,5 9]])
B = np.array([0 ,8 ,-9])
Y= np.linalg.solve(A,B)= [29. 16. 3.]
单位矩阵
任何向量与单位矩阵相乘结果为他本身,单位矩阵:所有沿主对角线元素都是1,而其他所有位置元素都为0;
np.identity(5)
逆矩阵
A为方阵,存在矩阵B使得AB=BA=I,I为单位矩阵,则称B为的逆矩阵;
对于Ax=b有
A = np.array([[2, 3], [4,5]])
A逆矩阵A_inv= np.linalg.inv( A )
I = A_inv.dot( A )
行列式
A = np.array([1 ,2 ],[4 ,5 ])
D = np.linalg.det(A)
范数
0范数 向量中非零元素个数
x = np.array([1, 0, -5])
n = np.linalg.norm(x, ord = 0)
1范数 向量中所有元素绝对值之和
x = np.array([3, 0, -4])
n1 = np.linalg.norm(x, ord = 1)
2范数 向量各个元素平方和求平凡根
x = np.array([3, 0, -4])
n2 = np.linalg.norm(x, ord = 2)
矩阵的范数
1范数 又称列范数,矩阵列向量中绝对值之和的最大值;
x = np.array([[-1, 1, 0],[-4, 3, 0],[1, 0, 1]])
n1 = np.linalg.norm(x, ord = 1)
2范数 又称谱范数,A_t A 矩阵的最大特征值的开平方
a = np.array([[-2, 1, 1],[-4, 3, 0],[1, 0, 2]])
ata = np.matmul(a.T, a)
print ("lambda ", np.linalg.eigvals(ata))
n2 = np.linalg.norm(a, ord = 2)
print('norm_2 ', n2, np.sqrt(30.55403188))
F范数,Frobenius范数,计算方式为矩阵元素的绝对值的平方和再开方。
x = np.array([[-1, 2, 0],[-4, 3, 0],[1, 0, 2]])
nfro = np.linalg.norm(x, ord = 'fro')
∞范数,又称行和范数, 即矩阵行向量中绝对值之和的最大值。
x = np.array([[-1, 2, 0],[-4, 3, 0],[1, 0, 2]])
ninf = np.linalg.norm(x, ord = np.inf)
Python与线性代数基本概念的更多相关文章
- Python学习:基本概念
Python学习:基本概念 一,python的特点: 1,python应用场景多;爬虫,网站,数据挖掘,可视化演示. 2,python运行速度慢,但如果CPU够强,这差距并不明显. 3,严格的缩进式编 ...
- python面向对象编程 -- 基本概念
面向对象的编程简要概括就是将要处理的问题抽象为数据和操作的集合,用类对其进行封装.其中数据和操作都称为类的属性,它们是一般是不变的. 对类进行实例化生成我们所说的对象,对象有自己的属性.对象的属性一般 ...
- python 中面向对象的概念
原文 域和作用空间 本地域,函数域(nonlocal)和 全局域(global) def scope_test(): def do_local(): spam = "local spam&q ...
- Python错误和异常概念(总)
转载请标明出处: http://www.cnblogs.com/why168888/p/6435956.html 本文出自:[Edwin博客园] Python错误和异常概念(总) 1. 错误和异常的处 ...
- 『Python题库 - 简答题』 Python中的基本概念 (121道)
## 『Python题库 - 简答题』 Python中的基本概念 1. Python和Java.PHP.C.C#.C++等其他语言的对比? 2. 简述解释型和编译型编程语言? 3. 代码中要修改不可变 ...
- 利用Python学习线性代数 -- 1.1 线性方程组
利用Python学习线性代数 -- 1.1 线性方程组 本节实现的主要功能函数,在源码文件linear_system中,后续章节将作为基本功能调用. 线性方程 线性方程组由一个或多个线性方程组成,如 ...
- python里类的概念
Python编程中类的概念可以比作是某种类型集合的描述,如"人类"可以被看作一个类,然后用人类这个类定义出每个具体的人--你.我.他等作为其对象.类还拥有属性和功能,属性即类本身的 ...
- 用 python 解决线性代数中的矩阵运算
用 python 解决线性代数中的矩阵运算 矩阵叉乘 矩阵求逆 矩阵转置 假定AX=B,求解未知矩阵X 矩阵的行列式值|matrix| 未完待续..... import sys from PyQt5. ...
- python基础整理----基本概念和知识
整理一下python的基本概念和知识, 主要用python3为语法标准. python介绍 一种面向对象的解释性计算机设计语言,具有丰富和强大的库. python定位:"优雅".& ...
随机推荐
- Flex实现web版图片查看器
项目需求: 在web端实现图片浏览,具有放大.缩小.滚轴放大缩小.移动.旋转以及范围控制. 成果图:
- 扛把子组20191121-10 Scrum立会报告+燃尽图 06
此作业的要求参见http://edu.cnblogs.com/campus/nenu/2019fall/homework/10070 一.小组情况: 队名:扛把子 组长:孙晓宇 组员:刘信鹏 韩昊 宋 ...
- SSH 免密登录服务器
本文详解如何以多种方法实现ssh免密码登陆远程服务器 阅读须知: 1.以下方法操作时请不要随意切换目录. 2.xxx为私钥,xxx.pub是公钥(默认一般文件名为id_rsa和id_rsa.pub,可 ...
- Spring中常见的设计模式——原型模式
1.原型模式应用场景 当遇到大量耗费劳动力的 get,set赋值场景时,如下: public class SetGetParam { public void setParam(UserDto user ...
- wincap linux部署
1.4.1 linux下安装Winpcap a) 下载Winpcap的源码:https://www.winpcap.org/devel.htm b) 上传源码包“WpcapSrc_4_1_3.zip” ...
- Jeewx-Boot 1.1 版本发布,基于SpringBoot的开源微信管家系统
项目介绍 JeewxBoot是一款基于SpringBoot的开源微信管家系统,采用SpringBoot2.1.3 + Mybatis + Velocity 框架技术.支持微信公众号.微信第三方平台(扫 ...
- 程序员的算法课(14)-Hash算法-对海量url判重
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...
- window.open()打开新窗口 及参数
在jsp页面中需要使用到弹出窗口,想到js的window对象有一个open方法可以弹出窗口,于是对open方法进行记录. 首先是open方法的语法及定义: 定义: open() 方法用于打开一个新的浏 ...
- python_tornado
1.创建Tornado服务器 1.创建Application对象 Application是Torando最核心的类 所有关于服务器的配置信息都写在Applicatio ...
- 企业日常巡检shell脚本
Linux内部查看系统信息 $INTERNET192忽略 [root@ mysql-master ~]# ip a|grep eth0|grep inet|cut -d' ' -f6|cut -d'/ ...