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 ...
随机推荐
- oracle 常用字符串函数
select initcap('guodongdong') from dual; /返回字符串并将字符串的第一个字母变为大写; s ...
- Mac重要目录
App最喜欢的几个目录 Mac和Windows操作系统有一个很大的不同,大部分App是没有安装程序的,一般下载下来就是一个dmg文件,解开之后直接将App拖到应用程序目录下就可以了,所以给人感觉卸载也 ...
- QPainter使用不同风格的QBrush来填充区域
效果图: void WgtText::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QP ...
- SpringBoot配置文件的加载位置
1.springboot启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件 --file:/config/ - ...
- jdk重装后com.sun.tools.javac.Main is not on the classpath的问题 .
在重装了JDk之后,在编译工程的时候出现如下错误: com.sun.tools.javac.Main is not on the classpath.Perhaps JAVA_HOME does no ...
- OOP ⑴
1.面向对象 类和对象的关系 类是我们在生活中,对身边的一系列事物,进行的不自觉的分类! 只是脑海中的一个印象! 在现实生活中,不存在! 存在的是我们这个印象的具体反映! 对象:用来描述客观事物的一个 ...
- 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别
本文以CaffeNet为例: 1. train_val.prototxt 首先,train_val.prototxt文件是网络配置文件.该文件是在训练的时候用的. 2.deploy.prototxt ...
- JAVA设计模式(一)单例模式
单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点. 核心知识点如下: (1) 将采用单例 ...
- 升级pip10.0.0后出现ModuleNotFoundError: No module named 'pip'的问题
pip10升级后各种pip install出错----- Traceback (most recent call last): File "/usr/local/bin/pip", ...
- Linux 最小安装常用包
Linux最小安装后很多常用的工具都没有,但直接通过yum install 文件名的方式可能无法找到,汇总于此,随时更新: CentOS7 1.如果要通过SecureCRT上直接上传下载文件,最简单的 ...