数据分析应用项目化教程(Python) 课件 项目3 使用NumPy进行多维数组创建与运算_第1页
数据分析应用项目化教程(Python) 课件 项目3 使用NumPy进行多维数组创建与运算_第2页
数据分析应用项目化教程(Python) 课件 项目3 使用NumPy进行多维数组创建与运算_第3页
数据分析应用项目化教程(Python) 课件 项目3 使用NumPy进行多维数组创建与运算_第4页
数据分析应用项目化教程(Python) 课件 项目3 使用NumPy进行多维数组创建与运算_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章使用NumPy进行多维数组创建与运算

NumPy概述numpy是什么?numpy核心内容认识数组编程认识⾼效处理⼤数组的数据numpy是什么?概念:Python进行科学计算的基础软件包,

主要用于在大型、多维数组上执行数值运算。历史:Numeric、Numarray,2005年产生其它科学计算的Python库基础:NumPy本身并没有提供多么高级的数据分析功能,理解NumPy数组以及面向数组的计算将有助于你更加高效地使用依赖NumPy的Python科学计算库,如scikit-learn、Pandas等等。numpy核心内容-数组和数组编程图g代码案例

⾼效处理⼤数组的数据小结Numpy是科学计算基础软件包,重在数值计算Numpy是其它科学计算包的基础多维数组ndarray按一维存储、空间连续通过索引访问多维数组NumPy是数组编程NumPy能高效处理大数组数据第三章使用NumPy进行多维数组创建与运算

任务3.1

认识NumPy的多维数组多维数组ndarray数据结构ndarray属性多维数组ndarray数据结构Python语言有数组类型吗?无多维数组的类型?numpy.ndarray维度(dimension)、轴(axis)、秩(rank)?形状(shape)是多少、轴长度(index范围)是多少?秩(rank)是多少?数组函数参数中axis的理解

NumPy的很多函数带参数axis。axis=0,表示沿着0轴方向进行操作,就是0轴的索引在改变,其它轴索引相对不变。对于二维数组,即对每一列进行操作;axis=1表示沿着1轴方向进行操作,就是1轴的索引在改变,其它轴索引相对不变。对于二维数组,即对每一行进行操作。ndarray属性属性使用说明.ndim秩,即轴的个数。.shape数组的形状。.size元素的总个数。.dtype数据类型。.itemsize数组中每个元素的字节大小。小结多维数组ndarray属性数组形状(shape)、维度(dimension)、

轴(axis)、秩(rank)含义和之间关系axis参数第三章使用NumPy进行多维数组创建与运算

任务3.2

创建多维数组从列表等其他Python的结构进行转换使用NumPy内部功能函数使用特殊的库函数从列表等其他Python的结构进行转换使用array函数从常规Python列表或元组中创建数组a创建一维数组b

创建二维数组c创建三维数组使用NumPy内部功能函数zeros:将创建一个用指定形状用0填充的数组。ones:将创建一个用1个值填充的数组。固定范围数组arange:将创建具有规则递增值的数组。Iinspace:将创建具有指定数量的元素的数组,并在指定的开始值和结束值之间平均隔开。a创建固定数值范围数组使用特殊的库函数生成特殊用途的数组,常见如numpy.random的随机函数。函数使用说明rand(d0,d1,...,dn)创建d0-dn维度的均匀分布的随机数数组,浮点数,范围从0-1。randint(low,high,(shape))从给定上下限范围选取随机数整数,范围是low,high,形状是shaperandn(d0,d1,...,dn)创建d0-dn维度的标准正态分布随机数,浮点数,平均数O,标准差1。seed(s)随机数种子,s是给定的种子值。因为计算机生成的是伪随机数,所以通过设定相同的随机数种子,可以每次生成相同的随机数。permutation对一个序列随机排序,不改变原数组。shuffle对一个序列随机排序,改变原数组。uniform(low,high,size)产生具有均匀分布的数组,low起始值,high结束值,size形状。normal(loc,scale,size)产生具有正态分布的数组,loc分布中心、概率分布的均值,scale标准差。poisson(lam,size)产生具有泊松分布的数组,lam随机事件发生率。小结有5种创建数组的通用机制:1.从其它Python结构(例如列表、元组)转换2.内在的NumPy数组创建对象(例如arange,1,0等)3.从磁盘读取标准或自定义格式的数组(后续学习)4.通过使用字符串或缓冲区从原始字节创建数组(后续学习)5.使用特殊的库函数创建(例如,随机的)第三章使用NumPy进行多维数组创建与运算

任务3.3多维数组运算数组矢量化运算数组广播运算数组和标量运算数组矢量化运算矢量:也叫向量,在numpy中,矢量是一维数组,二维数组的每行是行矢量,每列是列矢量。一维数组被视为二维数组中的行矢量。矢量化运算:指的是用数组表达式代替循环来操作数组,也就是说使用NumPy数组,可以使你不用编写循环就可对数据执行批量运算。图解数组矢量化运算矢量化运算是基于整个数组运行而不是其中的单个元素,这对于数组编程而言是必要的。矢量运算意味着shape相等的数组之间的任何算术运算都会将运算应用到对应位置的元素级。根据运算规则,面向数组,逐元素进行。数组广播运算⼴播(broadcasting):不同形状的数组之间的算术运算的执⾏⽅式。广播运算:当形状不相等的数组执行算术计算的时候,就会自动触发广播机制,该机制会对数组进行扩展,扩展维度小的数组,使数组的shape属性值一样,这样就可以进行矢量运算。如图,a和b数组列数一致,对应行数需要广播。广播是有条件的:假如一维数组b的shape不是(3,),而是(2,),广播就会失败。(4,3)和(2,),没有某一维度长度等长或为1,广播失败。数组和标量运算数组和标量运算,会产生一个与数组具有相同行和列的新数组,标量值传播到对应位置。其它广播情况:行数列数均不一致,均需要广播小结数组矢量化运算:数组之间的算术运算,shape一致,应用到对应位置元素级数组广播运算:shape不一致,数组自动扩展使shape一致,然后进行矢量运算,广播可能失效。可以画广播图来确定广播是否能成功。数组标量运算:先简单的广播,后矢量运算第三章使用NumPy进行多维数组创建与运算

任务3.3多维数组运算矩阵和数组矩阵相乘(矩阵点积)乘法函数矢量乘法运算重难点矩阵和数组矩阵,英文matrix,和数组的主要区别,矩阵必须是二维的,而数组可以是多维的。矩阵类型是numpy.matrix,数组类型是numpy.ndarray。二维数组可以表示矩阵,实现矩阵的所有功能,只不过需要调用相关方法或使用特殊运算符。比如数组实现矩阵乘法需调用dot方法,或使用@运算符。numpy的开发者推荐统一使用ndarray类来代替matrix类,使用数组来操作矩阵和线性代数,使得python生态看起来规范。矩阵和二维数组可以相互转换。矩阵相乘(矩阵点积)由m×n个数排成的m行n列的数表称为m行n列的矩阵,简称m×n矩阵。矩阵乘法遵循准则:(M行,N列)*(N行,L列)=(M行,L列)乘法函数矢量点乘:是两个矢量的对应位相乘后再求和,矢量点乘结果是标量。矢量叉乘:是两个矢量的对应位相乘,矢量叉乘结果是矢量。np.dot和np.matmul都是矩阵的乘法函数,是矢量点乘运算,np.matmul中禁止矩阵与标量的乘法。在矢量乘矢量的点乘运算中,np.matmul与np.dot没有区别。np.multiply是数组的乘法运算,和数组的*运算符等价,是矢量叉乘运算。如果将数组转化为矩阵,则*运算符表示矩阵相乘。矢量乘法运算重难点小结矩阵和数组:推荐使用np.ndarray类处理矩阵或线性代数矩阵相乘(矩阵点积):(M行,N列)*(N行,L列)=(M行,L列)矢量点乘:np.dot、np.matmul、@矢量叉乘:np.multiply、

*矢量乘法运算重难点:矢量点乘、叉乘在数组中的运算第三章使用NumPy进行多维数组创建与运算

任务3.4多维数组的索引和切片基本索引和切片索引花式(数组)索引布尔型索引基本索引和切片索引numpy的数组索引分为基本索引、切片索引、花式索引和布尔索引四种类型,可以使用这四种索引方式获取数组元素,还可以使用它们的混合方式。数组索引机制:方括号([])加下标的形式引用数组元素,下标就是轴方向上的索引。i轴索引范围:[0,shape[i]-1],shap[i]是i轴的轴长度。基本索引:直接使用下标作为索引,形如a[i]、a[i][j]、a[i,j]等访问数组。切片索引:使用“:”隔开元素下标作为索引,形如a[i:k]、a[i:k][j]、a[i:k,j]等访问数组。花式索引和布尔索引花式索引:使用整数数组或列表作为索引,也叫数组索引,形如a[[i1,i2]]等。布尔索引:使用布尔数组作为索引,返回布尔值为true对应的数据,形如a[a==3]图解基本索引和切片运算a

一维数组的基本索引和切片运算b二维数组的基本索引和切片运算图解花式索引图a花式索引运算图解布尔索引图a布尔索引运算图b布尔索引运算图c

布尔索引运算图解切片和索引索引和切片运算副本与视图Python序列的切片属于副本,Numpy数组的切片属于视图。如果想要一份数组切片的拷贝而不是视图的话,就必须显式地复制这个数组,例如data[1:3].copy()。副本:拷贝,物理内存不在同一位置;视图:引用,物理内存在同一位置。小结基本索引和切片索引花式(数组)索引布尔型索引第三章使用NumPy进行多维数组创建与运算

任务3.5多维数组的数据处理与运算将条件逻辑转为数组运算数组统计运算数组排序检查数组元素唯一化及其他集合逻辑运算将条件逻辑转为数组运算np.where()两种使用方式1)np.where(cond,x,y):满足条件cond,输出x,不满足输出y

awhere条件逻辑运算将条件逻辑转为数组运算

2)np.where(arry):输出arry中‘真’值的索引,‘真’可理解为非零。函数返回元组类型,元组的每个元素是一维数组。若参数是二维数组,元组的第一个数组是行索引,第二个数组是列索引。用于根据条件筛选数据。数组统计运算a图解常用统计函数数组统计运算b图解常用统计函数数组统计运算c图解常用统计函数数组排序np.sort函数可以对数组进行排序,并返回排序好的数组,默认按最后一个轴排序。np.sort(axis=-1),axis=-1表示按最后一个轴方向排序。检查数组元素np.any()检查给定轴向上是否有一个元素为True,任意一个元素为True,输出为True。np.all()检查给定轴向上的所有元素是否都为True,所有元素为True,输出为True。

any和all也适用于非布尔型数组,所有非0元素都会按True处理。唯一化及其他集合逻辑运算小结将条件逻辑转为数组运算:传三个参数和一个参数的np.where()数组统计运算:np.max()、np.argmax()等,需理解axis数组排序:np.sort()、np.argsort()检查数组元素:np.any()、np.all()唯一化及其他集合逻辑运算:np.unique()等第三章使用NumPy进行多维数组创建与运算

任务3.5多维数组的数据处理与运算通用函数numpy中的nan和infnan的注意点axis参数理解通用函数

NumPy提供熟悉的数学函数,例如sin,cos和exp。在NumPy中,这些被称为“通用函数”。在NumPy中,这些函数在数组上按元素进行运算,产生数组作为输出。一元通用函数:接收一个数组参数;二元通用函数:接收二个数组参数通⽤函数(即ufunc)是⼀种对ndarray中的数据执⾏元素级运算的函数。通用函数的输入是一组标量,输出也是一组标量。一元通用函数函数使用说明abs(a)、fabs(a)逐个元素地计算整数、浮点数或复数的绝对值sqrt(a)计算每个元素的平方根(与a**0.5相等)square(a)计算每个元素的平方(与a**2相等)exp(a)计算每个元素的自然指数值e^x次方log(a)、log10(a)、log2(a)、log1p(a)分别为自然对数(底数为e)、底数为10的log、底数为2的log,log(1+x)sign(a)计算每个元素的符号值:1(正数)、0(零)、-1(负数)ceil(a)计算每个元素的最高整数值(即大于或者等于给定数值的最小整数)modf(a)分别将数组的小数部分和整数部分按数组形式返回二元通用函数函数使用说明add(a,b)将数组a和数组b中对应位置的元素相加subtract(a,b)从a数组中减去b数组中的元素multiply(a,b)将数组a与数组b相乘divide(a,b),floor_divide(a,b)将数组a除于数组b;数组a整除数组b(舍去余数)maximum(a,b)、fmax(a,b)将数组a与数组b中对应位置的元素比较,返回元素级的最大值;比较数组a和b,并返回一个包含按元素的最大值的新数组,如果两个元素相同,则返回第一个。minimum(a,b)、fmin(a,b)将数组a与数组b中对应位置的元素比较,返回元素级的最小值;比较数组a和b,并返回一个包含按元素的最小值的新数组,如果两个元素相同,则返回第一个。mod(a,b)计算数组a与数组b中相应元素的相除后的余数(求模计算)copysign(a,b)将b数组中各元素的符号赋值给a数组中的对应元素greater、greater_equal、less、less_equal、equal、not_equal、logical_and、logical_or、logical_xor执行元素级的比较运算,最终产生布尔型数组,相当于运算符>、≥、<、≤、==、!=;执行元素级的真值逻辑运算,相当于与&,或|,异或^numpy中的nan和infnan(NAN,Nan):不是一个数字,数据分析中,nan常被用作表示数据缺失值。什么时候numpy中会出现nan:

当我们读取本地的文件为float的时候,如果有缺失,就会出现nan;

当做了一个不合适的计算的时候,比如inf-infnp.sqrt(-3)inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷什么时候会出现inf包括(-inf,+inf)当做了一个不合适的计算的时候,比如np.divide(-3,0)nan的注意点1.两个nan是不相等的In[2]:np.nan==np.nanOut[2]:False2.np.nan!=np.nanIn[3]:np.nan!=np.nanOut[3]:True3.利用以上特性,判断数组中nan个数In[4]:t=np.array([1,2,np.nan,np.nan])In[5]:np.count_nonzero(t!=t)Out[5]:24.如何判断ndarray对象中哪些元素是nan?通过np.isnan(t)来判断,返回布尔数组。有了布尔数组作为索引,就可以把所有nan替换掉。In[6]:np.isnan(t)Out[6]:array([False,False,True,True])In[7]:t[np.isnan(t)]=0In[8]:tOut[8]:array([1.,2.,0.,0.])5.nan和任何值计算都为nanIn[9]:np.nan+0Out[9]:nan6.nan或者inf的类型是floatIn[10]:type(np.nan)Out[10]:floatIn[11]:type(np.inf)Out[11]:floatnan值替换

在一组数据中单纯的把nan替换为0,合适么?会带来什么样的影响?比

如,全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行。那么问题来了:

如何计算一组数据的中值或者是均值?对列、行做循环,逐个元素判断来计算。

在对numpy数组求平均np.mean()时,如果数组中有nan,此时求得的结果为nan。那么该如何忽略其中的nan来计算呢?此时可以用另一个方法:np.nanmean(),np.median,np.nanmax(),np.nanmin()等。ndarry缺失值填充列均值,并且不使用np.nanmean(),如何处理呢?axis参数理解小结通用函数:以逐元素方式操作多维数组的函数,支持数组广播。有数学运算函数、三角函数、位运算函数、比较函数、浮动函数。numpy中的nan和inf:nan是缺失值,inf是无穷大值nan的注意点:nan和任何值计算都为nanaxis参数理解:axis=i

,表示沿着i轴方向操作,即i轴的索引在变,而其它轴方向的索引相对不变。第三章使用NumPy进行多维数组创建与运算

任务3.6

多维数组的操作连接数组分割数组翻转数组修改数组形状连接数组-np.concatenate

连接数组-np.stack连接数组-np.hstacknp.vstackahstack和vstack运算bhstack和vstack运算分割数组-split分割数组-np.hsplitnp.vsplit翻转数组-T翻转数组-transposeswapaxesarr.transpose(1,2,0)

transpose()方法对换数组的多个轴(维度)1轴-->0轴,2轴-->1轴,0轴-->2轴

参数是轴,arr[i][j][k]==arr.transpose(1,2,0)[j][k][i]当transpose()不传任何参数时,作用与T属性类似,arr.T即可完成数组arr的转置arr.swapaxes(1,0)

只能对换数组的两个轴arr[i][j][k]==arr.swapaxes(1,0)[j][i][k]transpose方法是对整个轴进行对换,而swapaxes是将参数的两个轴进行对换

这里arr.swapaxes(1,0)==arr.transpose(1,0,2)修改数组形状-reshapea[None,:]==a[np.newaxis,:]修改数组形状-flattenravelarr.flatten():默认按行拉平数组,返回一份数组拷贝,对拷贝所做的修改不会影响原始数组。

arr.ravel():拉平多维数组为一维,返回视图,对数据更改时会影响原来的数组。arr.reshape(-1):拉平多维数组为一维,返回视图,和ravel、flatten一样都可以将多维数组降至一维。np.expand_dims(arr,axis):函数通过在指定位置插入新的轴来扩展数组形状,维度升一级。小结连接数组分割数组翻转数组修改数组形状第三章使用NumPy进行多维数组创建与运算

任务3.7多维数组存取Numpy专有npy格式二进制文件存取多维数组的二进制文件存取一维或二维数组的文本文件存取数据提取Numpy特有npy格式二进制文件存取numpy.save(file,arr):

将数组保存到以.npy为扩展名的文件中,扩展名.npy自动添加。numpy.load(file):

从.npy为扩展名的文件中读取数据,读取时需指定全名。

优势:读写数组数据简便,在读取npy格式文件的多维数据时,会自动处理数组的维度、元素类型等信息,速度快。

二进制文件存取-存取多维数组

arr.tofile(file,sep=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论