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容器拖动(Bordercontainer为例)
Bordercontainer的拖放到任意位置. mxml: 为Bordercontainer添加鼠标按下和弹起事件 <s:BorderContainer id="bdShow&quo ...
- Relation-Shape Convolutional Neural Network for Point Cloud Analysis(CVPR 2019)
代码:https://github.com/Yochengliu/Relation-Shape-CNN 文章:https://arxiv.org/abs/1904.07601 作者直播:https:/ ...
- Java数组定义及初始化
数组定义及初始化 数组这玩意是一种用于存放数据最常见数据结构. 数组的的概念及注意点 数组要求所有的数组元素具有相同的数据类型,且只能存在一种数据类型,要多专一有多专一. 数据类型既可以是基本类型也可 ...
- 题解 P3954 【成绩】
题目评级: ★ (水题) 内容及算法: 无,简单模拟计算即可 代码: /** *@author little_frog */ #include <bits/stdc++.h> using ...
- Head First设计模式——模板方法模式
前言:本篇我们讲解模板方法模式,我们以咖啡和茶的冲泡来学习模板方法.关于咖啡另一个设计模式例子也以咖啡来讲解,可以看下:Head First设计模式——装饰者模式 废话不多说,开始进入模板方法模式. ...
- 使用Cap解决.Netcore分布式事务
一.什么是Cap CAP 是一个基于 .NET Standard 的 C# 库,它是一种处理分布式事务的解决方案,同样具有 EventBus 的功能,它具有轻量级.易使用.高性能等特点. 在我们 ...
- 理解Java对象序列化【转】
原文链接:http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html 关于Java序列化的文章早已是汗牛充栋了,本文是 ...
- swiper实现一个好看的轮播图
轮播是我们在编写页面中经常遇到的模块,所以网上也会有各种有有关轮播图的插件.今天忽然间看到了swiper上一个高颜值的轮播功能,顺便做一下分享. 首先页面在head内要先引用 swiper的css 和 ...
- Linux网络相关、firewalld和netfilter、netfilter5表5链介绍、iptables语法 使用介绍
第7周第3次课(5月9日) 课程内容: 10.11 Linux网络相关10.12 firewalld和netfilter10.13 netfilter5表5链介绍10.14 iptables语法 扩展 ...
- C语言博客作业08
C语言I博客作业08](https://www.cnblogs.com/490-85-00-58-/p/11863312.html) 问题 回答 这个作业属于那个课程 C语言程序设计II 这个作业要求 ...