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 ...
随机推荐
- 2015-09-16 html课程总结1
HTML (HyperText Makeup Language)是超文本标记语言. 1.HTML结构 <html> <head> <title>标题</tit ...
- [LeetCode] 43. Multiply Strings ☆☆☆(字符串相乘)
转载:43. Multiply Strings 题目描述 就是两个数相乘,输出结果,只不过数字很大很大,都是用 String 存储的.也就是传说中的大数相乘. 解法一 我们就模仿我们在纸上做乘法的过程 ...
- python 怎样使用单个反斜杠\
path2 = "c:\\windows\\temp\\readme.txt" path2:用一个"\"取消第二个"\"的特殊转义作用,即为 ...
- activity和fragment之前运行的生命周期
1.activity生命周期 2.fragment的生命周期 3.对比图 4.测试代码 package com.goso.testapp; import android.app.Activity; i ...
- js如何将选中图片文件转换成Base64字符串?
如何将input type="file"选中的文件转换成Base64的字符串呢? 1.首先了解一下为什么要把图片文件转换成Base64的字符串 在常规的web开发过程中,大部分上传 ...
- Java Web(五) 监听器Listener
监听器概述 在上一篇里介绍了过滤器Filter,而Listener是Servlet的另一个高级特性.Listener用于监听Java Web程序中的事件,例如创建,修改,删除Session,reque ...
- shell 数值运算
declare数值运算 linux默认变量类型为字符串 declare [+/-] [选项] 变量名 '-' 给变量设定类型属性 '+' 取消变量的类型属性 '-a' 将变量声明为数组型 '-i' 将 ...
- Win10系列:VC++调用自定义组件2
(2)C#调用WinRT组件 在解决方案资源管理器中右键点击解决方案图标,选择添加一个Visual C#的Windows应用商店的空白应用程序项目,并命名为FileCS.接着右键点击FileCS项目的 ...
- jsp 中文乱码
解决jsp中文乱码问题的几个步骤 1 jsp页面设置 <%@ page language="java" contentType="text/html; ...
- day15-python常用内置模块的使用
在日常的开发工作中,我们要写很多的python代码,如果都写在一个文件中,会导致代码特别难维护,为了拓展代码的可维护性,我们把函写在不同的文件里,这样每个文件包含的文件就比较少,逻辑更加清楚.在pyt ...