Python语言程序设计课件 第9章 科学计算与可视化专题_第1页
Python语言程序设计课件 第9章 科学计算与可视化专题_第2页
Python语言程序设计课件 第9章 科学计算与可视化专题_第3页
Python语言程序设计课件 第9章 科学计算与可视化专题_第4页
Python语言程序设计课件 第9章 科学计算与可视化专题_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

第九章科学计算与可视化应用专题本章知识导读9.1NumPy简单应用9.2Matplotlib简单应用CATALOGUE目录01NumPy简单应用9.1.1

NumPy简介NumPy是Python的一个第三方库,就是NumericalPython的意思。NumPy重在数值计算,也是大部分Python科学计算库的基础库,多用在大型、多维数组上执行数值运算。可广泛用于以下任务:

机器学习模型在编写机器学习算法时,需要对矩阵进行各种数值计算,例如,矩阵乘法、换位、加法等。NumPy数组能够用于存储训练数据和机器学习模型的参数,而且代码简单、计算效率高。1图像处理和计算机图形学23如果将计算机中的图像表示为多维数组,NumPy是最自然的选择。NumPy还提供了一些优秀的库函数来快速处理图像,例如,镜像图像、按特定角度旋转图像等。

数学任务NumPy对于执行各种数学任务非常有用,如数值积分、微分、内插、外推等。9.1.2多维数组及创建NumPy最主要的数据类型是ndarray,可以说是NumPy的灵魂,代表的是一种特殊的数据结构——n维数组。相对于列表和元组,ndarray可以更高效地存储大量的数字元素,提高运算速度,节省内存,还能方便地与各种扩展库进行数据交换。

注意ndarray中的所有数据的数据类型必须相同。在Pycharm中安装numpy库打开Pycharm,依次点击File->Settings。或者直接使用Ctrl+Alt+S快捷键打开settings。在左侧找到Project->PythonInterpreter。点击“+”按钮用来添加第三方库。如下图所示:在界面上方的搜索框内搜索numpy,并点击下方的InstallPackage。安装完成后,下方会显示InstallSuccessfully。0100203

在Python文件中使用如下代码导入NumPy包:>>>importnumpyasnp9.1.2多维数组及创建9.1.2多维数组及创建

NumPy提供了一系列函数用于创建数组,如下表9-1所示:

函数描述array()从列表或元组创建数组zeros(shape,dtype=)创建全0数组,shape为数组形状,dtype为元素的数据类型ones(shape,dtype=)创建全1数组,shape为数组形状,dtype为元素的数据类型empty(shape,dtype=)创建随机数组,数据接近为0,shape为数组形状,dtype为元素的数据类型linspace(x,y[,n])创建一维等差数组,参数值为起始值、终止值和元素总数logspace(x,y[,n])创建一维等比数组,参数值为起始值、终止值和元素总数,x和y是10的幂arrange([x,]y[,k])创建从x到y,步长为k的数组。x省略时默认为0,k省略时默认为1random.rand(m,n)创建m行n列的随机数组zeros_like()创建与给定数组相同维度和数据类型的全0数组ones_like()创建与给定数组相同维度和数据类型的全1数组创建ndarray最直接的方式是利用NumPy包中的array函数指定,可以创建任意维度的数组。9.1.2多维数组及创建示例创建方法1:9.1.2多维数组及创建示例创建方法2:使用表9-1中其他方法创建多维数据9.1.3形状与重构

ndarray两个重要特征行数和列数(shape)元素类型(dtype)129.1.3形状与重构重构示例可以查看已有数组的形状和元素类型,示例9.1.3形状与重构表9-2NumPy重构数组常用函数函数描述reshape(shape)不改变原数组,返回一个新维度的数组resize(shape)“就地修改”数组本身的维度swapaxes()不改变原数组,返回新数组,进行轴调换,如实现矩阵转置操作flatten()不改变原数组,返回新数组,将数组降为一维,不改变原数组tolist()不改变原数组,将多维数组转化为嵌套列表astype()不改变原数组,返回新数组,重设数组元素的数据类型一个数组生成后,我们可以对它进行重构。常用的重构方法如下表所示。9.1.3形状与重构数组重构示例(1)>>>my_array=np.array([(1,2,3),(4,5,6)])>>>my_array1=my_array.reshape(3,2)#不改变原数组my_array>>>print(my_array)[[123][456]]>>>print(my_array1)[[12][34][56]]>>>my_array1.resize(2,3)#在my_array1上直接重构>>>print(my_array1)[[123][456]]9.1.3形状与重构数组重构示例(2)>>>print(my_array1.swapaxes(0,1))#实现转置,不改变my_array1[[14][25][36]]>>>print(my_array1.flatten())#转换成一维数组,不改变my_array1[123456]>>>print(my_array1)[[123][456]]>>>print(my_array1.tolist())#转为嵌套列表,不改变my_array1[[1,2,3],[4,5,6]]>>>print(my_array1.astype(float))#重设数组元素的数据类型,不改变my_array1[[1.2.3.][4.5.6.]]注意9.1.4ndarray操作与运算---ndarray索引和切片ndarray的索引和切片操作与列表非常相似,数组元素的存取方式和Python的标准方法相同,包含两种序号体系:正向递增序号和反向递减序号。基本方法(1)与Python列表序列不同,通过索引和切片获取的新数组是原始数组的一个视图,该视图与原始数据共享同一块数据空间。因而,修改新数组的数据信息,将影响原数组。(2)数组有规则切片时,使用一个方括号[],如my_array[3:6:2];数组不规则切片时,需要使用嵌套的两个方括号[[]],如my_array[[1,3,6]]。9.1.4ndarray操作与运算ndarray索引与切片示例9.1.4ndarray操作与运算多维数组的切片读取方法示例9.1.4ndarray操作与运算使用整数序列存取数组元素示例除了使用上述方式存取元素,NumPy还提供了两种更加高级的元素存取方法,即:整数序列和布尔数组读取数据。当使用整数序列对数组元素进行存取时,将整数序列中的每个元素作为索引,整数序列可以是列表或者数组。9.1.4ndarray操作与运算使用布尔数组作为索引存取数组元素示例当使用布尔数组作为索引对数组元素进行存取时,只存取索引为True的对应元素。布尔型索引必须具有与被索引数组的初始维度相同的形状。9.1.4ndarray操作与运算---ndarray浅复制和深复制浅复制,复制过来的是“引用”,即复制对象和被复制的对象共享一个存储空间,二者不是相互独立的。深复制,复制过来的是“值”,即复制对象和被复制对象占用两个不同的空间,二者相互独立。ndarray的深复制方法:copy()。>>>my_array=np.arange(1,10)>>>my_array1=my_array.copy()>>>my_array1[1]=100#此处修改了my_array1的值>>>print(my_array1)>>>print(my_array)[11003456789][123456789]>>>my_array=np.arange(1,10)>>>my_array1=my_array>>>my_array1[1]=100#此处修改了my_array1的值>>>print(my_array)[11003456789]浅复制示例深复制示例9.1.4ndarray操作与运算---ndarray插入与删除基本方法删除与插入示例可以使用delete()和insert()进行元素的插入和删除。9.1.4ndarray操作与运算---ndarray的计算基本方法矩阵相乘示例ndarray基本的运算方式有加、减、乘、除等。如果与常数运算,相当于常数分别与数组的每一位元素进行运算。如果是数组之间的运算,数组元素的对应位置分别进行运算。如果要实现矩阵运算,需要使用数组的相关函数实现。9.1.4ndarray操作与运算---ndarray的计算基本方法用法示例ndarray还有对数组的各种统计函数,如min()、max()、sum()、mean()等9.1.4ndarray操作与运算---ndarray的计算NumPy内置了许多ufunc函数,ufunc是universalfunction的缩写,它是一种能对数组的每个元素进行操作的函数。这些函数大部分都是在C语言级别实现的,因此它们的计算速度非常快,同样的功能比math库的要快。实际计算时推荐使用这些函数进行运算。ufunc函数对应表达式add(a,b)a+bsubtract(a,b)a-bmultiply(a,b)a*bdivide(a,b)a/bfloor_divide(a,b)a//bnegative(a)-apower(a,b)a**bremainder(a,b),mod(a,b)a%b表9-3常用ufunc函数及对应表达式9.1.4ndarray操作与运算---ndarray的计算当两个数组维度一致时,与运算符一样,使用ufunc函数进行相应运算。当数组之间维度不同时,可通过广播方式使得较小的数组扩展到较大数组的大小,最终不同大小数组的维度一致,再进行计算。注意广播规则如下:如果列数一样但行数不一样,那么进行以行为单位的广播操作,进行循环补齐。循环补齐用法示例02Matplotlib简单应用9.2Matplotlib简单应用Matplotlib是一个应用最广泛、高质量的Python2D绘图库。用户可以简单、轻松地实现数据图形化,并且提供多样化的输出格式。本章主要介绍Matplotlib的常见用法,通常使用pyplot子库进行二维图形绘制。Matplotlib还支持三维绘图,不过需要额外导入mpl_toolkits.mplot3d.axes3d模块。9.2.1基本函数曲线绘制首先,需要导入pyplot子库,一般起别名为plt,语法如下:绘制曲线的关键函数有两个:plot(x,y):根据坐标(x,y)的值绘图可以构造x、y坐标的列表,利用上述函数进行绘制。也可以根据函数计算系列x和y的值,以数组或列表的形式传递给plot()函数,绘制简单函数曲线。show():将绘制结果在屏幕上进行显示。12实例9-1:绘制正余弦函数曲线解析:可以利用NumPy生成x坐标值的数组,利用NumPy中的正余弦函数计算得到y值的数组,从而绘制相应的曲线。参考代码结果输出Matplotlib支持对曲线进行各种标注与美化。我们可以根据需求改变线条的颜色、线形,增加线标识、图名等。线条风格字符描述线条标记字符描述线条颜色字符描述‘-’实线‘.’点标记‘b’蓝色‘--’破折线‘*’星形标记‘r’红色‘:’虚线‘D’菱形标记‘m’洋红色‘-.’点画线‘o’圆标记‘k’黑色

‘x’X标记‘g’绿色

‘s’正方形标记‘c’青色

‘+’加号标记‘y’黄色表9-4常用线条风格、标记、颜色表9-5常用标签相关函数介绍函数描述函数描述title()添加标题xlim(xmin,xmax)设置当前x轴取值范围legend()放置图例ylim(ymin,ymax)设置当前y轴取值范围xlabel()设置x轴标签axhline()绘制水平线ylabel()设置y轴标签axvline()绘制垂直线xtick()设置x轴刻度位置和标签subplot()绘制多个子图ytick()设置y轴刻度位置和标签

legend()函数有两个参数一个参数是loc:表示图例的位置,包括“upperright”、“upperleft”、“lowerright”、“lowerleft”等;另一个参数是bbox_to_anchor:表示图例与图形之间的距离,当出现图形与图例重叠时,可使用该参数调整位置。这个位置由两个参数决定:第一个参数为图例与左边的距离,第二个参数为图例与下面的距离。实例9-2:图片标注与美化参考代码绘制正余弦函数曲线,并为其增加图名、标签,设置线形、绘制坐标轴。实例9-2:图片标注与美化结果输出绘制正余弦函数曲线,并为其增加图名、标签,设置线形、绘制坐标轴。图9-2设置线形、颜色、图例、标题接着绘制x和y轴,可以在上述代码的plt.show()之前插入以下代码,效果如图9-3所示。>>>plt.axhline(0,linestyle='--',color='k')#绘制x轴,黑色,破折线>>>plt.axvline(0,linestyle='--',color='k')#绘制y轴,黑色,破折线图9-3绘制坐标轴实例9-2:图片标注与美化最后,我们可以通过savefig(‘文件名’)函数将绘制出的图形保存在文件中。注意savefig()函数必须用在show()之前。这是因为show()函数在显示图像的同时,会清空缓存区,无法再保存文件。实例9-3:多子图绘制分别绘制正余弦函数曲线,将两个图像分为一行两列显示。并分别为其增加图名,绘制坐标轴。参考代码实例9-3:多子图绘制分别绘制正余弦函数曲线,将两个图像分为一行两列显示。并分别为其增加图名,绘制坐标轴。结果输出图9-4绘制多个子图9.2.2散点图绘制函数scatter(x,y,s,c,marker)用于绘制散点图。其中,x,y是相同长度的输入数据,是点的坐标;s表示点的大小;marker为点的类型,默认为“o”。更多的参数信息可以查阅相关资料。1散点图概念散点图是数据点在直角坐标系平面上的分布图,可以将序列显示为一组点,值表示为位置坐标。2绘制方法实例9-4:散点图绘制随机生成200个样本数据,并用散点图绘制。参考代码结果输出9.2.3饼状图、柱状图绘制一般地,饼状图用到的是pie()函数:pie(x,explode=None,labels=None,colors=None,autopct=None,startangle=None)x:输入的是一维数据,表示各块所占比例,可用列表给出;explode:用于设置饼图的某块偏离中心点的距离,偏离的数据一般用一个小数表示;labels:各部分数据的标签,用列表给出;autopct:圆里面的文本格式,例如’%2.1f’表示整数有2位、小数有1位的浮点数;startangle:表示饼状图开始绘制的旋转角度,默认从x轴正方向逆时针画起。1饼图概念饼图常用于统计学模块,显示一个数据系列中各项的大小与总和的比例。适合用于表示各类数据的占比情况,可以直观清晰地显示出各成分比重。2绘制方法实例9-5:饼图绘制TIOBE编程社区指数是一个衡量编程语言受欢迎程度的指标,评判的依据来自世界范围内的工程师、课程、供应商及搜索引擎,TIOBE官网公布了2024年10月的编程语言排行榜(表9-6),请用饼图对表中数据进行可视化展示。表9-62024年10月编程语言排行榜(百分比)实例9-5:饼图绘制随机生成200个样本数据,并用散点图绘制。参考代码结果输出9.2.3饼状图、柱状图绘制条形图用到函数是bar(),基本格式为:bar(x,height,width=0.8,align='center'),其中x表示输入的一维数组;height和width分别表示柱状图中条的高度和宽度;align默认是“center”,表示x轴坐标与柱体中心对齐。1条形图概念条形图是一种用矩形条状图形表示分类数据的基础可视化图表。2绘制方法实例9-6:柱状图绘制将例9-5中的数据用柱状图表示。参考代码结果输出9.2.4三维图形绘制最新版的matplotlib只需要为axes()或figure.add_subplot()函数指定关键字参数projection=“3d”即可创建3维画布,接下来绘制散点图、曲线图等方法都与绘制二维图形相同。1三维图形概念三维图形用于展示数据在三维空间中的分布,适用于复杂数据的可视化。Matplotlib还可以绘制三维图像。2绘制方法>>>importmatplotlib.pyplotasplt>>>fig=plt.figure()>>>ax=fig.add_subplot(111,projection='3d')#绘制多个子图时使用或者:>>>importmatplotlib.pyplotasplt>>>ax=plt.axes(projection='3d')#绘制单个图像时使用scatter()函数用于绘制三维散点图:scatter(xs,ys,zs,c=None,marker=None)其中,xs、ys、zs以数组形式给出,三者维度一样;c表示线的颜色;marker为线条标记。实例9-7:绘制随机三维散点图参考代码结果输出12绘制三维曲线则用到plot3D()函数,其基本格式为:plot3D(xs,ys,zs,c=None),其中,xs、ys、zs以数组形式给出,三者维度一样;c表示线的颜色绘制三维表面图plot_surface()函数能够根据给定的x,y坐标网格和相应的z值,生成一个三维表面图。该函数基本格式如下:plot_surface(X,Y,Z,*args,**kwargs)X,Y,Z:分别代表x,y,z坐标,X,Y,Z数组的维度必须相同,且它们应该形成网格数据,X和Y

温馨提示

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

评论

0/150

提交评论