AI之路,第二篇:python数学知识2
第二篇:python数学知识2
线性代数
导入相应的模块;
>>> import numpy as np (数值处理模块)
>>> import scipy as sp
1,张量实现;
生成元素全为0 的二维张量,两个维度分别3,4.
>>> np.zeros((3,4))
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
>>>
生成三维的随机张量,三个维度分别是2,3,4;
>>> np.random.rand(2,3,4)
array([[[0.38758731, 0.5499685 , 0.54972813, 0.57450416],
[0.35331611, 0.16655625, 0.12040096, 0.90553467],
[0.30474903, 0.381874 , 0.371502 , 0.79308308]],
[[0.21948554, 0.39107485, 0.96109378, 0.62545556],
[0.79382549, 0.94084427, 0.25833607, 0.03340559],
[0.53158233, 0.9919193 , 0.98290661, 0.34611917]]])
>>>
2, 矩阵实现;(Matrix 矩阵)
创建一个3*3 的零矩阵,矩阵这里zeros函数的参数是一个tuple类型
>>> np.mat(np.zeros((3,3)))
matrix([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
>>>
3,单位矩阵实现;
单位矩阵,对角线元素均为1, 其他位置均为0 的方阵;
>>> np.eye(4)
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
>>>
4,reshape运算
用来改变一个张量的维度数和每个维度的大小;
例: 一个10*10的图片保存时直接存为一个包含100个元素的序列, 在读取后就可以使用reshape将其从1*100变成10*10;
生成一个包含整数0-11的向量;
>>> x = np.arange(12)
>>> x
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> x.shape #查看数组大小
(12,)
>>> x = x.reshape(1,12) #将x转换成二维矩阵,其中矩阵的第一个维度为1
>>> x
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]])
>>> x.shape #查看数组大小
(1, 12)
>>> x = x.reshape(3,4) # 将x转换3*4的矩阵
>>> x
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>>
5,转置实现;
向量和矩阵的转置是交换行列顺序,而三维及其以上张量的转置就需要指定转换维度;
生成包含5个元素的向量x并将其转置;
>>> x = np.arange(5).reshape(1,-1)
>>> x
array([[0, 1, 2, 3, 4]])
>>> x.T
array([[0],
[1],
[2],
[3],
[4]])
>>>
#生成3*4的矩阵并转置
>>> y = np.arange(12).reshape(3,4)
>>> y
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> y.T
array([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])
#生成2*3*4的张量;
>>> A = np.arange(24).reshape(2,3,4)
>>> A
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
#将B的0,1两个维度转置
>>> A.transpose(1,0,2)
array([[[ 0, 1, 2, 3],
[12, 13, 14, 15]],
[[ 4, 5, 6, 7],
[16, 17, 18, 19]],
[[ 8, 9, 10, 11],
[20, 21, 22, 23]]])
>>>
6,矩阵乘法实现
矩阵乘法:记两个矩阵分别为A和B,两个矩阵能够相乘的条件为第一个矩阵的列数等于第二个矩阵的行数;
>>> x = np.arange(6).reshape(3,2)
>>> y = np.arange(6).reshape(2,3)
>>> x
array([[0, 1],
[2, 3],
[4, 5]])
>>> y
array([[0, 1, 2],
[3, 4, 5]])
矩阵相乘
>>> np.matmul(x,y)
array([[ 3, 4, 5],
[ 9, 14, 19],
[15, 24, 33]])
>>>
7,矩阵对应运算
元素对应运算: 针对形状相同张量的运算统称,包括元素对应相乘,相加等;即对两个张量相同位置的元素进行加减乘除等运算。
>>> x = np.arange(6).reshape(3,2) #创建矩阵
>>> x
array([[0, 1],
[2, 3],
[4, 5]])
>>> x*x #矩阵相乘
array([[ 0, 1],
[ 4, 9],
[16, 25]])
>>> x+x #矩阵相加
array([[ 0, 2],
[ 4, 6],
[ 8, 10]])
>>>
8,逆矩阵实现;
只有方阵才有逆矩阵,逆矩阵实现。
>>> x = np.arange(4).reshape(2,2)
>>> x
array([[0, 1],
[2, 3]])
>>> np.linalg.inv(x)
array([[-1.5, 0.5],
[ 1. , 0. ]])
9,特征值与特征向量
求一个矩阵的特征值和特征向量;
>>> x = np.diag((1,2,3)) #写入对角阵x
>>> x #输出对角阵x
array([[1, 0, 0],
[0, 2, 0],
[0, 0, 3]])
>>> a,b = np.linalg.eig(x) #特征值赋值给a,对应特征向量赋值给b;
>>> a #特征值 1,2,3
array([1., 2., 3.])
>>> b #特征向量
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
>>>
10,求行列式;
求一个矩阵的行列式;
>>> e = np.array([[1,2,3], \
... [4,5,6], \
... [7,8,9]])
>>> f = np.array([[-1,0,1], \
... [2,3,4], \
... [5,6,7]])
>>> np.linalg.det(e)
0.0 #有误,6.6.。。。。
>>> np.linalg.det(f)
2.664535259100367e-15
>>> np.linalg.det(e)
0.0#错
11,奇异值分解实现;
构建一个矩阵,然后对其进行奇异值分解;
>>> dataMat = [[1,1,1,0,0],[2,2,2,0,0],[1,1,1,0,0],[5,5,5,0,0],[1,1,0,2,2]]
>>> dataMat = np.mat(dataMat)
>>> U,Simga,VT = np.linalg.svd(dataMat)
>>> U
matrix([[-1.78064631e-01, -2.34744938e-02, 9.82557191e-01,
2.55992727e-02, -4.08409122e-02],
[-3.56129261e-01, -4.69489876e-02, -8.88026466e-02,
9.28675681e-01, 2.53635904e-02],
[-1.78064631e-01, -2.34744938e-02, -7.22652741e-02,
-4.96207581e-02, -9.79825212e-01],
[-8.90323153e-01, -1.17372469e-01, -1.46537325e-01,
-3.66665975e-01, 1.93987789e-01],
[-1.30700450e-01, 9.91421904e-01, 1.38777878e-16,
-2.30284541e-16, -5.20417043e-18]])
>>> Simga
array([9.71946559e+00, 2.92095680e+00, 1.55006458e-15, 7.75255049e-17,
2.80852393e-33])
>>> VT
matrix([[-5.81380112e-01, -5.81380112e-01, -5.67932825e-01,
-2.68945754e-02, -2.68945754e-02],
[ 9.02829499e-02, 9.02829499e-02, -2.49133882e-01,
6.78833664e-01, 6.78833664e-01],
[-7.95884448e-01, 5.42563216e-01, 2.53321232e-01,
6.33303080e-02, 6.33303080e-02],
[-1.42877918e-01, -5.99559264e-01, 7.42437182e-01,
1.85609295e-01, 1.85609295e-01],
[-0.00000000e+00, 1.54864761e-16, -1.48501146e-16,
7.07106781e-01, -7.07106781e-01]])
>>>
12,线性方程组求解
>>> from scipy.linalg import solve
>>> a = np.array([[3,1,-2],[1,-1,4],[2,0,3]])
>>> b = np.array([5,-2,2.5])
>>> x = solve(a,b)
>>> x
array([0.5, 4.5, 0.5])
>>>
>>>
AI之路,第二篇:python数学知识2的更多相关文章
- AI之路,第一篇:python数学知识1
python 数学知识1 1,向量: 一个向量是一列数.这些数是有序排列的:通过次序中的索引,可以确定每个单独的数: 2, 矩阵: 由m x n 个数aij(i=1,2,3,…, m; j=1,2, ...
- [转帖]虚拟内存探究 -- 第二篇:Python 字节
虚拟内存探究 -- 第二篇:Python 字节 http://blog.coderhuo.tech/2017/10/15/Virtual_Memory_python_bytes/ 是真看不懂哦 ...
- 第二篇 python进阶
目录 第二篇 python进阶 一 数字类型内置方法 二 字符串类型内置方法 三 列表类型内置方法(list) 四 元组类型内置方法(tuple) 五 字典内置方法 六 集合类型内置方法(self) ...
- Python人工智能之路 - 第二篇 : 算法实在太难了有现成的直接用吧
本节内容 预备资料: 1.FFmpeg: 链接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg 密码:w6hk 2.baidu-aip: pip ins ...
- python之路第二篇(基础篇)
入门知识: 一.关于作用域: 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 10 == 10: name = 'allen' print name 以下结论对吗? ...
- Python之路(第二篇):Python基本数据类型字符串(一)
一.基础 1.编码 UTF-8:中文占3个字节 GBK:中文占2个字节 Unicode.UTF-8.GBK三者关系 ascii码是只能表示英文字符,用8个字节表示英文,unicode是统一码,世界通用 ...
- Python成长之路第二篇(1)_数据类型内置函数用法
数据类型内置函数用法int 关于内置方法是非常的多这里呢做了一下总结 (1)__abs__(...)返回x的绝对值 #返回x的绝对值!!!都是双下划线 x.__abs__() <==> a ...
- python成长之路第二篇(4)_collections系列
一.分别取出大于66的数字和小于66的数字 小练习:需求要求有一个列表列表中存着一组数字,要求将大于66的数字和小于66的数字分别取出来 aa = [11,22,33,44,55,66,77,88,9 ...
- Python成长之路第二篇(3)_字典的置函数用法
字典的置函数用法(字典dict字典中的key不可以重复) class dict(object): """ dict() -> new empty dictionar ...
随机推荐
- Vue SSR常见问题、异常处理以及优化方案
本文主要介绍Vue SSR(vue服务端渲染)的应用场景,开发中容易遇到的一些问题,提升ssr性能的方法,以及ssr的安全性问题. SSR的应用场景 1.SEO需求 SEO(Search Engine ...
- 微信小程序 获取位置、移动选点、逆地址解析
WGS- 地心坐标系,即GPS原始坐标体系.在中国,任何一个地图产品都不允许使用GPS坐标,据说是为了保密.GoogleEarth及GPS芯片使用. .GCJ-02火星坐标系,国测局02年发布的坐标体 ...
- vue数组操作不更新视图问题
vue 观察数组的变异方法 更新视图 push() pop() shift() unshift() splice(i,n,arr) sort(xx) reverse() ex: app.book.pu ...
- MVC的前端和后端的Model Binding
1.前端提交JSON 字符串 {"id":13,"title":"这里是标题33","day":"2018-8 ...
- Ie11 的改变
摘录地址: http://www.4fang.net/content.jsp?id=30537 微软在上周刚刚发布了用于Windows 8.1上的首个Internet Explorer 11的 ...
- Win10系列:JavaScript 动画1
在应用程序中使用动画会使应用显得更加生动,进而给用户带来良好的视觉效果.例如,当用户将某个项添加到列表时,新项不会立即出现在列表中,而是采用动画形式到达相应位置,并且列表中的其他项也采用动画形式移动到 ...
- 尚学堂java 答案解析 第六章
本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题 1.C 解析:对void下的函数,可以使用"return;"表示结束之意,但不能&q ...
- CCF关于NOIP2018获奖证书发放的公告
CCF定于即日起开始受理NOIP2018获奖证书申请.凡获得NOIP2018复赛提高组和普及组一二三等奖的选手均可申请证书.本次获奖证书有电子版和纸质版两种.电子版证书免费发放,纸质版证书收取部分工本 ...
- UVa LA 3882 - And Then There Was One 递推,动态规划 难度: 2
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- 每天CSS学习之border-spacing
border-spacing是CSS2的一个属性.其作用是规定表格的相邻单元格边框之间的距离.如果表格的border-collapse属性值为collapse时,border-spacing设置无效. ...