Python数据分析基础与应用(微课版) 教案 模块3 数据分析应用NumPy_第1页
Python数据分析基础与应用(微课版) 教案 模块3 数据分析应用NumPy_第2页
Python数据分析基础与应用(微课版) 教案 模块3 数据分析应用NumPy_第3页
Python数据分析基础与应用(微课版) 教案 模块3 数据分析应用NumPy_第4页
Python数据分析基础与应用(微课版) 教案 模块3 数据分析应用NumPy_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

Python数据分析基础与应用模块模块3数据分析应用NumPy【学习与训练】3.1初识NumPy3.1.1NumPy概述1.NumPy是什么?NumPy是一个开源的、功能强大的Python科学计算库,是Python的第三方扩展包,主要用于对多维数组执行科学计算与快速处理,也可实现更高级的数据操作和科学计算。NumPy主要包括:功能强大的N维数组对象。精密广播功能函数。集成C/C+和Fortran代码的工具。强大的线性代数、傅立叶变换和随机数功能。2.使用NumPy做数据处理有哪些优点NumPy是Python科学计算基础库,可以便捷高效地处理大量数据,那么使用NumPy进行数据处理时具有以下优点:NumPy可以对数组进行高效的数学运算;NumPy的ndarray对象可以用来构建多维数组;NumPy能够执行傅立叶变换与重塑多维数组形状;NumPy提供了线性代数以及随机数生成的内置函数。3.NumPy库的数值计算广泛用于哪些任务NumPy库的数值计算广泛用于以下任务:(1)机器学习模型(2)图像处理和计算机图形学(3)实现各类数学任务3.1.2安装NumPy1.使用Python包管理器pip来安装NumPy安装NumPy需要基础环境是Python,NumPy安装之前必须成功安装了Python和Pip。安装命令如下:pipinstallnumpy。2.验证NumPy是否安装成功打开Python交互式界面,使用命令“importnumpy”导入NumPy,如果未出现错误提示,则表示已安装成功。NumPy安装成功后,就可以导入NumPy使用,代码如下:>>>importnumpy>>>numpy.__version__#查看版本导入NumPy一般使用别名np来代替,代码如下:>>>importnumpyasnp>>>np.__version__#查看版本3.2使用多种方法创建NumPy数组对象3.2.1初识ndarray对象NumPy定义了一个称为ndarray的数组对象,它是一个一系列相同类型元素组成的数组集合。该数组是由相同类型的数据按有序的形式组织而成的一个集合,组成数组的各个数据称为数组元素,数组中的每个元素都占有大小相同的内存块,可以使用索引或切片的方式获取数组中的每个元素。与Python中的数组相比,ndarray对象可以处理结构更复杂的数据。ndarray对象采用了数组的索引机制,将数组中的每个元素映射到内存块上,并且按照一定的布局对内存块进行排列,常用的布局方式有两种,即按行或者按列。通过NumPy的内置函数array()可以方便创建ndarray对象,其语法格式如下:numpy.array(object,dtype=None,copy=True,order=None,ndmin=0)函数array()的参数说明如下:☑object:表示一个数组序列。☑dtype:为可选参数,通过它可以更改数组的数据类型。☑copy:为可选参数,表示数组能否被复制,默认是True。☑order:以哪种内存布局方式创建数组,有3个可选值,分别是C(行序列)、F(列序列)、A(默认)。☑ndmin:用于指定数组的维度。3.2.2熟悉与使用NumPy数据类型1.熟悉NumPy数据类型NumPy作为Python的扩展包,它提供了比Python更加丰富的数据类型。2.熟悉NumPy数据类型标识字符码NumPy中每种数据类型都有一个唯一标识的字符,如表3-1所示。表3-1NumPy数据类型的标识字符码类型标识字符对应的数据类型类型标识字符对应的数据类型b代表布尔型Mdatatime(日期时间)i带符号整型OPython对象u无符号整型S字节串f浮点型a字符串c复数浮点型UUnicodem时间间隔(timedelta)V原始数据(void)3.熟悉NumPy数据类型对象NumPy的数据类型对象(DataTypeObject)又称dtype对象,主要用来描述NumPy数组元素的数据类型、大小以及字节顺序。例如常见的int64、float32都是dtype对象的实例,其语法格式如下:importnumpyasnpnp.dtype(object)创建一个dtype对象可以使用下列方法:dt=np.dtype(64)3.2.3创建NumPy一维数组对象1.快速定义与使用一维NumPy数组在Python的交互式界面输入代码与观察代码运行结果:>>>importnumpyasnp>>>np_array=np.array([1,2,3,4,5])>>>print(np_array)代码运行结果如下:[12345]>>>print(type(np_array))#输出结果为<class'numpy.ndarray'>在上面的简单实例中,首先使用importnumpy命令导入NumPy库。然后,创建了一个包含5个整数的简单NumPy数组,然后将其在交互界面输出。2.使用多种方法定义一维NumPy数组方法1:使用array函数,通过列表list创建数组对象。代码如下:importnumpyasnparray1=np.array([1,2,3,4,5])array1输出结果:array([1,2,3,4,5])方法2:使用array函数,通过元组tuple创建数组对象。代码如下:array2=np.array((1,2,3,4,5))array2输出结果:array([1,2,3,4,5])方法3:使用asarange函数定义数组对象。asarray()与array()类似,但是它比array()更为简单。asarray()函数能够将一个Python序列转化为ndarray对象,其语法格式如下:numpy.asarray(sequence,dtype=None,order=None)asarray()函数的参数说明如下:☑sequence:接受一个Python序列,可以是列表或者元组;☑dtype:为可选参数,数组的数据类型;☑order:指数组元素在计算机内存中的储存顺序,可以设置为C或者F,“C”代表以行顺序存储,“F”则表示以列顺序存储,默认顺序是“C”,即以行优先顺序存储。方法4:使用numpy.random模块的函数生成随机数创建数组对象。(1)用10个[0,1)范围的随机小数构成数组代码如下:array5=np.random.rand(10)array5(2)用10个[1,100)范围的随机整数构成数组代码如下:array6=np.random.randint(1,100,10)array6(3)用20个均值为50,标准差10的正态分布随机数构成数组代码如下:array7=np.random.normal(50,10,20)array73.2.4创建NumPy二维数组对象1.快速定义与使用二维NumPy数组在Python的交互式界面输入代码与观察代码运行结果:>>>importnumpyasnp>>>my_2d_array=np.zeros((2,3))>>>print(my_2d_array)将在屏幕上输出以下内容:[[0.0.0.][0.0.0.]]2.使用多种方法定义二维NumPy数组方法1:使用array函数,通过嵌套的列表list创建数组对象。代码如下:importnumpyasnparray1=np.array([[1,2,3],[4,5,6]])array1输出结果:array([[1,2,3],[4,5,6]])方法2:使用zeros、ones、full函数指定数组的形状创建数组对象。(1)使用zeros函数指定数组的形状创建数组对象zeros()函数用来创建元素均为0的数组,同时还可以指定被数组的形状,语法格式如下:numpy.zeros(shape,dtype=float,order="C")该函数的参数说明如下:☑shape:指定数组的形状大小。☑dtype:为可选项,指定数组的数据类型,默认数据类型为float。☑order:指数组元素在计算机内存中的储存顺序,“C”代表以行顺序存储,“F”则表示以列顺序存储,默认顺序是“C”,即以行优先顺序存储。代码如下:array2=np.zeros((3,4))array2输出结果:array([[0.,0.,0.,0.],[0.,0.,0.,0.],[0.,0.,0.,0.]])(2)使用ones函数指定数组的形状创建数组对象ones()函数返回指定形状大小与数据类型的新数组,并且新数组中每项元素均用1填充,语法格式如下:numpy.ones(shape,dtype=None,order='C')代码如下:array3=np.ones((3,4))array3输出结果:array([[1.,1.,1.,1.],[1.,1.,1.,1.],[1.,1.,1.,1.]])(3)使用full函数指定数组的形状创建数组对象代码如下:array4=np.full((3,4),6)array4输出结果:array([[6,6,6,6],[6,6,6,6],[6,6,6,6]])方法3:使用eye函数创建单位矩阵。代码如下:array5=np.eye(3)array5输出结果:array([[1.,0.,0.],[0.,1.,0.],[0.,0.,1.]])方法4:使用reshape方法将一维数组变成二维数组。代码如下:array6=np.array([1,2,3,4,5,6]).reshape(2,3)array6输出结果:array([[1,2,3],[4,5,6]])方法5:使用numpy.random模块的函数生成随机数创建数组对象。代码如下:array7=np.random.rand(2,3)array7代码如下:array8=np.random.randint(1,100,(3,4))array8方法6:使用numpy.empty()方法创建未初始化的数组。numpy的方法empty()用于创建未初始化的数组,可以指定创建数组的形状(shape)和数据类型(dtype),其语法格式如下:numpy.empty(shape,dtype=float,order='C')该方法的参数说明如下:☑shape:指定数组的形状;☑dtype:数组元素的数据类型,默认值是值float;☑order:指数组元素在计算机内存中的储存顺序,默认顺序是“C”,即行优先顺序。代码如下:array9=np.empty((3,2),dtype=int)array9输出结果:array([[0,0],[0,0],[0,0]])3.2.5创建NumPy多维数组对象方法1:使用array函数,通过嵌套的列表list创建数组对象。方法2:使用随机方式创建多维数组。方法3:将一维二维的数组变形为多维数组。3.2.6创建NumPy区间数组对象1.使用arange函数指定取值范围创建数组对象在NumPy中,可以使用arange()函数来创建指定取值范围的数组对象,语法格式如下:numpy.arange(start,stop,step,dtype)其参数说明如下:☑start:起始值,默认是0。☑stop:终止值,注意生成的数组元素值不包含终止值。☑step:步长,默认为1。☑dtype:为可选参数,指定ndarray数组的数据类型。根据start与stop指定的范围以及step步长值,生成一个ndarray数组。2.使用linspace函数用指定范围内均匀间隔的数值创建等差数组对象linspace函数用于创建在指定的数值区间内返回均匀间隔的一维等差数组,默认均分50份,语法格式如下:np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)其参数说明如下:☑start:代表数值区间的起始值;☑stop:代表数值区间的终止值;☑num:表示数值区间内要生成多少个均匀的样本。默认值为50;☑endpoint:默认值为True,表示数列包含stop终止值,反之不包含;☑retstep:默认值为True,表示生成的数组中会显示公差项,反之不显示;☑dtype:代表数组元素值的数据类型。3.使用logspace函数用指定范围内的数值创建等比数组对象logspace()函数返回一个ndarray数组,用于创建等比数组,其语法格式如下:np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)其参数说明如下:☑start:表示序列的起始值。☑stop:表示序列的终止值。☑num:表示数值范围区间内样本数量,默认为50。☑endpoint:默认值为True,表示包含终止值,反之不包含。☑base:表示对数函数的log底数,默认为10。☑dtype:为可选参数,指定ndarray数组的数据类型。3.3使用NumPy对象ndarray的属性3.3.1使用size属性和dtype属性1.使用size属性size属性用于获取数组元素个数。2.使用dtype属性dtype属性用于获取数组元素的数据类型。3.3.2使用shape属性shape属性用于获取数组形状,即数组的行数和列数。其返回值一个由数组维度构成的元组,这个元组的元素数量就是维度的数目,即ndim属性值(秩),例如2行3列的二维数组,其形状可以表示为(2,3),分别为行数和列数,其秩为2。shape属性也可以用来调整数组维度的大小。1.输出数组的维度代码如下:importnumpyasnparray3=np.array([[2,4,6],[3,5,7]])print(array3.shape)输出结果:(2,3)2.通过shape属性修改数组的形状大小代码如下:array3.shape=(3,2)print(array3)输出结果:[[24][63][57]]3.3.3使用ndim属性ndim属性用于获取NumPy数组的维数。例如,一维数组的维数是1,二维数组的维数是2。在NumPy中,数组的维数称为秩(rank),秩就是轴的数量,即数组的维数,一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,一维数组只有一个维度,只有一根轴,即axis=0,其内部的所有数据沿同方向依次排列,数组array1的结构如图3-1所示;二维数组的结构类似表格,有两个维度,即它有沿行方向和列方向的两根轴,其中axis=0,表示沿着第0轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作,数组array2的结构如图3-2所示。二维数组相当于是两个一维数组,其中第一个一维数组中每一行又是一个一维数组。图3-1一维数组的轴图3-2二维数组的轴3.3.4使用itemsize属性itemsize属性用于获取数组每个元素占用内存空间的字节数。代码如下:#数据类型为int8,代表1字节array9=np.array([1,2,3,4,5],dtype=8)print(array9.itemsize)#数据类型为int64,代表4字节array10=np.array([1,2,3,4,5],dtype=32)print(array10.itemsize)#数据类型为int64,代表8字节array11=np.array([1,2,3,4,5],dtype=64)print(array11.itemsize)输出结果:1483.3.5使用nbytes属性nbytes属性用于获取数组所有元素占用内存空间的字节数。代码如下:print(array9.nbytes,array10.nbytes,array11.nbytes)输出结果:520403.4NumPy数组对象基本操作3.4.1NumPy数组索引和切片1.普通索引运算2.切片索引运算NumPy数组的切片是使用形如[开始索引:结束索引:步长]的语法格式,通过指定开始索引(默认值无穷小)、结束索引(默认值无穷大)和步长(默认值1),从数组中取出指定部分的元素并构成新的数组。(1)使用NumPy内置函数slice()构造切片对象NumPy内置函数slice()可以用来构造切片对象,该函数需要传递三个参数值分别是start(起始索引)、stop(终止索引)和step(步长),通过它可以实现从原数组的上切割出一个新数组。(2)使用省略号实现二维数组的切片操作切片还可以使用省略号“…”,如果在行位置使用省略号,那么返回值将包含所有行元素,反之,则包含所有列元素。①返回二维数组的第2列代码如下:print(array1[...,1])输出结果:[258]②返回二维数组的第2行代码如下:print(array1[1,...])输出结果:[456]③返回二维数组第2列后的所有项代码如下:print(array1[...,1:])[[23][56][89]]3.4.2NumPy副本和视图1.赋值操作赋值操作是数组引用的一种方法。例如,将array1数组赋值给变量array2,被赋值后的变量array2与array1组具有相同的内存id。因此,无论操作array1、array2中哪个数组,另一个数组也会受到影响。2.通过数组切片创建数组视图切片操作返回的是数组视图,对数组视图的修改会影响到原数组。3.使用ndarray对象的view()方法返回一个新生成的数组副本ndarray对象的view()方法用于返回一个新生成的数组副本,因此对该数组的操作,不会影响到原数组。4.使用ndarray对象的copy()方法返回原数组的副本ndarray对象的copy()方法返回原数组的副本,对副本的修改不会影响到原数组。3.4.3NumPy数组高级索引1.利用整数数组进行索引利用整数数组进行索引,这里所说的整数数组可以是NumPy的ndarray对象,也可以是Python中内置的序列list、元组tuple等可迭代类型。利用整数数组进行索引,它可以选择数组中的任意一个元素,例如,选择第几行第几列的某个元素。(1)对于一维数组,可以使用正向或负向索引值选择一维数组中的任意一个元素,例如array1[[0,1,-1]],分别取数组array1的第1、2以及最后一个一维数组元素。(2)对于二维数组,通过数组元素的行索引值选择二维数组中的任意一行,例如array2[[0,2]],分别取array2的第1行和第3行。也可以通过数组元素的列索引值选择二维数组的任意一列,这时行使用“:”或“…”进行选择,例如array2[...,[0,2]]、array2[:,[0,2]],分别取array2的第1列和第3列。(3)对于二维数组,通过数组元素的行索引值与列索引值配对组合选择二维数组中的任意一个元素,例如array2[[0,1,2],[0,1,0]],其中左侧的括号[0,1,2]代表行索引,右侧的括号[0,1,0]代表列索引,将行、列索引值组合会得到(0,0)、(1,1)和(2,0),它们分别对应着输出原数组中的索引位置对应的数组元素,即第1行第1列数据元素、第2行第2列数组元素、第3行第1列数组元素。2.利用布尔类型的数组进行索引当输出的结果需要经过布尔运算(例如比较运算)时,此时会使用到另一种高级索引方式,即布尔数组索引。布尔数组索引通过布尔类型的数组对数组元素进行索引,布尔类型的数组可以通过手动设置布尔值构造,也可以通过关系运算来产生布尔类型的数组。3.花式索引花式索引也可以理解为整数数组索引,但是它们之间又略有不同,花式索引也会生成一个新的副本。(1)一维数组使用花式索引当原数组是一维数组时,使用一维整型数组作为索引,那么索引结果就是相应索引位置上的元素。(2)二维数组使用花式索引如果原数组是二维数组,那么索引数组也需要是二维的,索引数组的元素值与被索引数组的每一行相对应。(3)使用倒序索引数组实现花式索引代码如下:print(array2[[-4,-2,-1]])输出结果:[[891011][16171819][20212223]](4)同时使用多个索引数组调整原数组元素的顺序还可以同时使用多个索引数组调整原数组元素的顺序,但这种情况下需要添加np.ix_。代码如下:print(array2[np.ix_([1,5,4,2],[0,3,1,2])])输出结果如下:[[4756][20232122][16191718][811910]]3.4.4NumPy数组遍历NumPy提供了一个迭代器对象nditer,它可以配合for循环完成对NumPy数组元素的遍历操作。1.以默认遍历顺序遍历NumPy数组(1)使用arange()函数创建一个3×4数组代码如下:importnumpyasnparray1=np.arange(0,60,5)array2=array1.reshape(3,4)print(array2)(2)使用nditer迭代器,并使用for进行遍历代码如下:foriteminnp.nditer(array2):print(item,end="")输出结果:0510152025303540455055(3)对二维数组进行转置操作代码如下:array3=array2.Tprint(array3)输出结果:#转置数组array3[[02040][52545][103050][153555]](4)二维数组array3转置后遍历输出代码如下:foriteminnp.nditer(array3):print(item,end="")输出结果:05101520253035404550552.以指定的遍历顺序遍历NumPy数组在内存中,Numpy数组提供了两种存储数据的方式,分别是C-order(行优先顺序)与Fortrant-order(列优先顺序)。那么nditer迭代器又是如何处理具有特定存储顺序的数组呢?其实它选择了一种与数组内存布局一致的顺序,之所以这样做,是为了提升数据的访问效率。在默认情况下,当遍历数组中元素的时候,不需要考虑数组的存储顺序,这一点通过遍历上述数组的转置数组已得以验证。3.遍历数组时控制能否修改数组元素值nditer对象提供了一个可选参数op_flags,它表示能否在遍历数组时对元素进行修改。它提供了以下三种模式。(1)read-only(只读模式)在只读模式下,遍历时不能修改数组中的元素。(2)read-write(读写模式)在读写模式下,遍历时可以修改元素值。(3)write-only(只写模式)在只写模式下,遍历时可以修改元素值。3.4.5NumPy数组变维操作1.使用NumPy的ndim属性查看数组的维度代码如下:importnumpyasnparray1=np.array([[1,2,3,4],[4,5,6,7],[9,10,11,23]])print(array1.ndim)输出结果:22.使用ndim参数创建不同维度的数组代码如下:#输出一个二维数组array2=np.array([1,2,3,4,5,6],ndmin=2)print(array2)print(array2.ndim)输出结果:[[123456]]23.使用reshape()函数实现数组变维数组的形状指的是多维数组的行数和列数,Numpy库提供的reshape()函数可以改变多维数组行数和列数,在不改变数组元素的前提下,修改数组的形状,从而达到数组变维的目的,即对数组形状的进行重塑,将3行2列的数组变维为2行3列的数组的示例如图3-6所示。3行2列2行3列图3-63行2列数组变维为2行3列数组示意图3.4.6NumPy数组转置操作1.使用numpy.transpose()函数和ndarray.T方法实现数组转置操作numpy.transpose()函数用于将数组的维度值进行对换,例如二维数组维度(2,4)使用该方法对换后即可变为(4,2)。二维数组使用transpose()函数可以实现矩阵转置,其语法格式如下:numpy.transpose(array,axes)其参数说明如下:☑array:待转置操作的数组☑axes:为可选参数,元组或者整数列表,将会按照该参数进行转置。ndarray.T的使用方法与transpose()函数类似,这里不再赘述。2.使用numpy.rollaxis()函数实现沿着指定的轴向后滚动至规定的位置numpy.rollaxis()函数的格式如下:numpy.rollaxis(array,axis,start)其参数说明如下:☑array:NumPy数组;☑axis:沿着哪条轴向后滚动,其它轴的相对位置不会改变;☑start:默认以0轴开始,可以根据数组维度调整它的值。3.使用numpy.swapaxes()函数对数组的轴进行对换numpy.swapaxes()函数的语法格式如下:numpy.swapaxes(array,axis1,axis2)3.4.7连接与分割NumPy数组操作1.连接数组操作(1)使用numpy.concatenate()函数连接数组numpy.concatenate()函数用于沿指定轴连接相同形状的两个或多个数组,其语法格式如下:numpy.concatenate((array1,array2,...),axis)其参数说明如下:☑array1,array2,……:表示一系列相同类型的数组;☑axis:沿着该参数指定的轴连接数组,默认为0。2.分割数组操作numpy.split()函数用于沿指定的轴将数组分割为多个子数组,其语法格式如下:numpy.split(array,indices_or_sections,axis)其参数说明如下:☑array:被分割的数组。☑indices_or_sections:若是一个整数,代表用该整数平均切分,若是一个数组,则代表沿轴切分的位置(左开右闭)。☑axis:默认为0,表示横向切分;为1时表示纵向切分。3.4.8NumPy数组元素增删改查操作1.使用resize()函数和reshape()函数修改数组的形状numpy的resize()函数用于返回指定形状的新数组,其语法格式如下:numpy.resize(arr,shape)2.使用numpy.append()函数在数组的末尾添加元素值numpy的append()函数用于在数组的末尾添加元素值,且返回一个一维数组。其语法格式如下:numpy.append(array,values,axis=None)其参数说明如下:☑array:待添加元素的数组;☑values:向array数组中添加的值,需要和array数组的形状保持一致;☑axis:默认为None,返回的是一维数组;当axis=0时,追加的值会被添加到行,而列数保持不变;若axis=1时,追加的值会被添加到列,而行数保持不变。3.使用numpy.insert()函数沿指定轴在给定索引值的前一个位置插入相应的元素值numpy的insert()函数用于沿指定的轴,在给定索引值的前一个位置插入相应的元素值,如果没有提供轴,则数组被展开为一维数组。其语法格式如下:numpy.insert(array,obj,values,axis)其参数说明如下:☑array:待插入元素值的数组☑obj:表示索引值,在该索引值之前插入values值;☑values:待插入的值;☑axis:指定的轴,如果未提供,则输入数组会被展开为一维数组。4.使用numpy.delete()函数从数组中删除指定的子数组numpy的delete()函数用于从数组中删除指定的子数组,并返回一个新数组。它与insert()函数相似,若不提供axis参数,则输入数组被展开为一维数组。其语法格式如下:numpy.delete(array,obj,axis)其参数说明如下:☑array:待删除子数组的数组;☑obj:整数或者整数数组,表示要被删除的数组元素或者子数组;☑axis:沿着哪条轴删除子数组。5.使用numpy.argwhere()函数获取数组中非0元素的索引numpy的argwhere()函数用于返回数组中非0元素的索引,若是多维数组则返回行、列索引组成的索引坐标。3.4.9NumPy字符串处理NumPy提供了许多字符串处理函数可以对字符串进行必要的处理,这些函数被定义在numpy.char类中,这些函数的操作对象是string_或者unicode_字符串数组。这些函数的名称与功能说明如表3-6所示。表3-6NumPy处理字符串数组的函数序号函数名称功能说明1add()对两个字符串数组相应位置的字符串做连接操作。2multiply()返回多个字符串副本,例如将字符串“try”乘以3,则返回字符串“trytrytry”。3center()用于居中字符串,并将指定的字符,填充在原字符串的左右两侧。4capitalize()将字符串第一个字母转换为大写。5title()将每个字符串的第一个字母转换为大写形式。6lower()将字符串数组中所有的字符串的大写转换为小写。7upper()将字符串数组中所有的字符串的小写转换为大写。8split()通过指定分隔符对字符串进行分割,并返回一个数组序列,默认分隔符为空格。9splitlines()以换行符作为分隔符来分割字符串,并返回数组序列。10strip()删除字符串开头和结尾处的空字符。11join()返回一个新的字符串,该字符串是以指定分隔符来连接数组中的所有元素。12replace()用新的字符串替换原数组中指定的字符串。13decode()用指定的编码格式对数组中元素依次执行解码操作。14encode()用指定的编码格式对数组中元素依次执行编码操作。3.5NumPy数组算术运算与矩阵乘法3.5.1NumPy数组广播机制NumPy中的广播机制(Broadcast)旨在解决不同形状数组之间的算术运算问题。我们知道,如果进行运算的两个数组形状完全相同,它们直接可以做相应的运算。1.求元素数量相同的两个一维数组的乘积代码如下:importnumpyasnparray1=np.array([0.1,0.2,0.3,0.4])array2=np.array([10,20,30,40])array3=array1*array2print(array3)输出结果:[1.4.9.16.]2.验证Numpy一维数组在轴0上的广播机制的实现过程代码如下:array_a=np.array([[0,0,0],[1,1,1],[2,2,2],[3,3,3]])#array_b数组与array_a数组形状不同array_b=np.array([1,2,3])print(array_a+array_b)输出结果:[[123][234][345][456]]3.验证Numpy一维数组在轴1上的广播机制的实现过程代码如下:array_c=np.array([[1],[2],[3],[4]])print(array_a+array_c)输出结果:[[111][333][555][777]]3.5.2NumPy数组的算术运算使用NumPy,可以轻松地在数组上执行数学运算。NumPy数组的“加减乘除”算术运算,分别对应add()、subtract()、multiple()以及divide()函数。1.NumPy数组的四则运算加、减、乘、除四则运算都是对数组进行逐元素运算,例如(a,b,c)+(d,e,f)的结果就是(a+d,b+e,c+f),分别对每一个元素进行配对,然后对它们进行运算,它返回的结果是一个数组。这里的乘法运算符执行的是逐元素乘法而不是矩阵乘法。2.NumPy数组常见的算术运算(1)对NumPy数组中的每个元素求倒数numpy的reciprocal()函数用于对数组中的每个元素取倒数,并以数组的形式将它们返回。当数组元素的数据类型为整型(int)时,对于绝对值小于1的元素,返回值为0,而当数组中包含0元素时,返回值将出现overflow(inf)溢出提示。(2)对NumPy数组中的每个元素求幂numpy的power()函数用于将array_a数组中的元素作为底数,把array_b数组中与array_a相对应的元素值求幂,最后以数组形式返回两者的计算结果。(3)求两个数组对应位置上元素相除后的余数numpy的mod()函数返回两个数组相对应位置上元素相除后的余数,它与numpy.remainder()的作用相同。3.使用NumPy的舍入函数实现数组元素的舍入运算NumPy提供了三个舍入函数。(1)使用numpy.around()函数实现数组元素的舍入运算numpy的around()函数用于返回一个十进制值数,并将数值四舍五入到指定的小数位上。其语法格式如下:numpy.around(array,decimals)其参数说明如下:☑array:代表数组;☑decimals:要舍入到的小数位数。其默认值为0,如果为负数,则小数点将移到整数左侧。(2)使用numpy.floor()函数实现数组元素的舍入运算numpy的floor()函数用于对数组中的每个元素值向下取整数,即返回不大于数组中每个元素值的最大整数。(3)使用numpy.ceil()函数实现数组元素的舍入运算numpy的ceil()函数与floor函数相反,表示向上取整,即返回不小于数组中每个元素值的最小整数。3.5.3NumPy数组的矩阵乘法运算1.NumPy数组的逐元素矩阵乘法numpy的multiple()函数用于两个矩阵的逐元素乘法。2.NumPy数组的矩阵乘积运算numpy的matmul()用函数用于计算两个数组的矩阵乘积。3.NumPy数组的矩阵点积numpy的dot()函数用于计算两个矩阵的点积。3.6NumPy统计计算与分析3.6.1NumPy统计计算1.计算numpy数组沿指定轴的最小值与最大值numpy中amin()和amax()这两个函数分别用于获取数组沿指定轴的最小值与最大值。(1)amin()函数沿指定的轴,获取数组中元素的最小值,并以数组形式返回;(2)amax()函数沿指定的轴,获取数组中元素的最大值,并以数组形式返回。对于二维数组来说,axis=1表示沿着水平方向,axis=0表示沿着垂直方向,如图3-10所示。图3-10axis水平轴和重直轴2.计算numpy数组元素中最大值与最小值的差值numpy中ptp()函数用于计算数组元素中最大值与最小值的差值,即最大值-最小值。3.沿指定轴计算numpy数组中百分位数百分位数,是统计学中使用的一种度量单位。numpy中percentile()函数用于沿指定轴计算数组中指定的百分位数,其语法格式如下:numpy.percentile(array,q,axis)其参数说明如下:☑array:numpy数组;☑q:要计算的百分位数,在0~100之间;☑axis:沿着指定的轴计算百分位数。4.计算numpy数组元素的中位数numpy中median()函数用于计算数组元素的中位数(中值)。5.沿指定的轴计算numpy数组中元素的算术平均值numpy中mean()函数用于沿指定的轴计算数组中元素的算术平均值,即元素之总和除以元素数量。6.使用average()函数计算numpy数组元素的加权平均值numpy中average()函数根据在数组中给出的权重,计算数组元素的加权平均值。该函数可以接受一个轴参数axis,如果未指定,则数组被展开为一维数组。其语法格式如下:average(array,axis=1,weights=wt,returned=True))其参数说明如下:☑array:numpy数组;☑axis:沿着指定的轴计算百分位数;☑weights:指定的权重,未指定权重时则权重默认为1;☑returned:指定是否返回权重的和,设置为True则返回权重之和。7.使用numpy的var()函数计算方差方差在统计学中也称样本方差,如何求得方差呢?首先我们要知道全体样本的平均值M,然后再求得每个样本值与均值之差的平方和,最后对差的平方和求均值。8.使用numpy的std()函数计算标准差标准差的计算公式如下:std=sqrt(mean((x-x.mean())**2NumPy中使用np.std()计算标准差。3.6.2NumPy数组线性代数计算1.使用numpy的dot()函数计算两个矩阵的点积numpy中dot()函数按照矩阵的乘法规则,计算两个矩阵的点积。点积运算就是将array1数组的每一行元素与array2数组的每一列元素相乘再相加。当输入一维数组时返回一个结果值,若输入的多维数组则同样返回一个多维数组结果。2.使用numpy的vdot()函数计算两个向量的点积numpy的vdot()函数用于计算两个向量的点积,与dot()函数不同。3.使用numpy的inner()函数计算数组之间的内积numpy的inner()函数用于计算数组之间的内积。当计算的数组是一维数组时,它与dot()函数相同,若输入的是多维数组则两者存在不同。4.使用numpy的matmul()函数计算两个矩阵的乘积numpy中matmul()函数用于计算两个矩阵的乘积,如果两个矩阵的维度不一致,就会产生错误。5.使用对角线元素来计算矩阵的行列式numpy中linalg.det()函数使用对角线元素来计算矩阵的行列式。计算2*2(两行两列)的行列式,示例如下:[[1,2],[3,4]]通过对角线元素求行列式的结果(口诀:“一撇一捺”计算法):1*4-2*3=-2可以使用numpy.linalg.det()函数来完成上述过程的计算。6.使用inv()函数计算矩阵的逆矩阵numpy中linalg.inv()函数用于计算矩阵的逆矩阵,逆矩阵与原矩阵相乘得到单位矩阵。3.6.3NumPy数组排序1.使用numpy.sort()函数对数组执行排序操作numpy.sort()函数用于对数组执行排序,并返回一个数组副本。其语法格式如下:numpy.sort(array,axis,kind,order)其参数说明如下:☑array:待排序的数组;☑axis:沿着指定轴进行排序,如果没有指定axis,默认在最后一个轴上排序,若axis=0表示按列排序,axis=1表示按行排序;☑kind:默认为quicksort(快速排序);☑order:若数组设置了字段,则order表示要排序的字段。2.使用numpy.argsort()函数沿着指定的轴对数组的元素值进行排序操作numpy的argsort()函数用于沿着指定的轴,对数组的元素值进行排序,并返回排序后的元素索引数组。3.使用numpy.lexsort()函数按键序列对数组进行排序操作numpy的lexsort()函数用于按键序列对数组进行排序,并返回一个已排序的索引数组,类似于numpy.argsort()函数。3.6.4NumPy数组搜索NumPy提供了许多可以在数组内执行搜索功能的函数,例如查找最大值、最小值或者满足一定条件的元素。1.使用numpy.nonzero()函数从数组中查找非零元素的索引位置numpy的nonzero()函数用于从数组中查找非零元素的索引位置。2.使用numpy.where()函数从数组中获取给定条件的数组元素索引值numpy的where()函数用于返回满足给定条件的数组元素的索引值。3.使用numpy.extract()函数从数组中获取给定条件的数组元素值numpy的extract()函数用于返回满足给定条件的数组元素值。4.使用numpy.argmax()函数从数组中获取最大值的索引numpy的argmax()函数用于返回数组中最大值的索引。5.使用numpy.argmin()函数从数组中获取最小值的索引argmin()函数用于返回数组中最小值的索引。3.6.5删除NumPy数组中的重复值numpy的unique()函数用于删除数组中重复的数组元素,并按查找的唯一元素进行排序后返回一个新数组。该函数的语法格式如下:numpy.unique(array,return_index,return_inverse,return_counts)其参数说明如下:☑array:待删除重复元素的数组,若是多维数组则以一维数组形式展开;☑return_index:如果为True,

温馨提示

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

评论

0/150

提交评论