




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章
Numpy数值分析库本章学习目标01了解Numpy数值分析库的基本概念,以及数组对象、数据类型和广播机制。03熟悉Numpy中的索引、切片和布尔索引技术,以及如何进行数组的排序和元素筛选。05学习Numpy中聚合函数和逐元素操作函数的使用,以及如何进行数组的统计分析和数学变换。02掌握利用Numpy进行数组创建、操作和数学计算的基础理论及编程实现。04理解Numpy中特殊数值(如NaN和Inf)的概念和处理方法,以及它们在数值计算中的影响。06培养使用Numpy解决实际科学计算问题的能力。目录3.2Numpy数据类型3.3Numpy数组广播机制3.4特殊数值处理3.1Numpy数组创建与操作3.1Numpy数组创建与操作
Numpy数组基本操作3.1.3Numpy函数3.1.4Numpy数组创建3.1.1Numpy数组属性3.1.23.1Numpy数组创建与操作importnumpyasnp导入惯例如下:01对于一维数组,只有一个轴,这条轴通常称为轴0,它沿着数组的长度方向操作。对于二维数组,有两个轴:轴0和轴1,轴0是沿着行的方向,轴1是沿着列的方向。数组的轴023.1.1Numpy数组创建1.使用np.array()方法实例演示使用np.array()方法将现有的列表或元组转换为NumPy数组。当array()方法的参数是一维列表或者元组时,创建的是一维数组。当array()方法的参数是二维列表或者元组时,创建的是二维数组。可以通过数组对象的ndim属性查看数组的维度。In:a=np.array([1,2,3,4])aOut:array([1,2,3,4])#一维列表转成一维数组In:b=np.array([[1,2,3],[4,5,6]])bOut:array([[1,2,3],[4,5,6]])#二维列表转成二维数组In:a.ndimOut:1In:b.ndimOut:23.1.1Numpy数组创建2.使用np.arange()方法实例演示arange()方法的用法与Python内置函数range()的用法相同,需要3个参数start、stop、step。不同之处在于,arange()方法生成的是一个numpy数组。结合arange()方法和数组对象的reshape()方法可以灵活创建各种维度和形状的数组。In:c=np.arange(0,10,2)cOut:array([0,2,4,6,8])In:d=np.arange(12).reshape((2,6))Out:array([[0,1,2,3,4,5],[6,7,8,9,10,11]])In:a=np.arange(12).reshape(2,-1)#维度大小为-1Out:array([[0,1,2,3,4,5],[6,7,8,9,10,11]])3.1.1Numpy数组创建3.生成随机数组实例演示用法:np.random.randint(x,y,size):生成[x,y)范围内的形状为size的随机整数数组。In:np.random.randint(1,10)#未指定size参数,生成一个随机整数Out:2In:np.random.randint(1,10,size=(5,))#生成一维数组Out:array([6,1,2,7,8])In:np.random.randint(1,10,size=(2,5))生成二维数组Out:array([[3,8,3,3,8],[3,7,5,8,2]])3.1.1Numpy数组创建3.生成随机数组实例演示用法:np.random.rand(shape):生成[0,1)范围内均匀分布的随机数数组,数组的形状通过参数数量指定。In:np.random.rand()#未指定参数,生成一个随机小数Out:0.45799666392103In:np.random.rand(3)#指定一个参数,生成一个一维数组Out:array([0.46840468,0.22441032,0.7115226])In:np.random.rand(2,4)#指定两个参数,生成一个二维数组Out:array([[0.48789605,0.62403898,0.09199842,0.62880645],[0.88644542,0.90503952,0.00590543,0.65129496]])3.1.2Numpy数组属性实例演示数组的常用属性如表3-1所示In:a=np.arange(8).reshape(2,4)a.ndimOut:2In:a.sizeOut:8In:a.shapeOut:(2,4)In:a.dtypeIn:dtype('int32')In:a.TOut:array([[0,4],[1,5],[2,6],[3,7]])3.1.2Numpy数组属性实例演示一维数组的转置还是一维数组。In:a=np.arange(4)aOut:array([0,1,2,3])In:a.TOut:array([0,1,2,3])3.1.3Numpy数组基本操作实例演示通过索引访问数组元素的方法与Python访问可迭代对象的方法相同,有正索引和负索引两种。In:a=np.arange(8).reshape(2,4)a[0][-1]Out:31.索引3.1.3Numpy数组基本操作实例演示Numpy数组的切片与Python可迭代对象切片有以下不同之处。(1)对于二维及以上,Numpy数组对每个轴都可以切片。In:a=np.arange(12).reshape(3,4)aOut:array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])In:a[1:3]#按行切片Out:array([[4,5,6,7],[8,9,10,11]])In:a[:,1:3]#按列切片,用冒号指定所有行Out:array([[1,2],[5,6],[9,10]])In:a[1:3,1:3]#同时对行和列切片Out:array([[5,6],[9,10]])In:a[1,2]#切片可以简化为对一个元素的访问Out:62.切片3.1.3Numpy数组基本操作实例演示Numpy数组的切片与Python可迭代对象切片有以下不同之处。(2)支持布尔索引。可以用一个元素是布尔值的数组或列表对数组进行索引,选出索引值为真的数组元素,生成一个新数组。通过布尔索引,选出数组中满足运算条件的元素In:a=np.arange(6)b=[True,False,True,True,False,True]c=a[b]#用元素是布尔值的列表进行索引cOut:array([0,2,3,5])#选出索引值为真的元素In:d=np.array([True,False,True,False,False,True])e=a[d]#用元素是布尔值的数组进行索引eOut:array([0,2,5])2.切片In:a=np.arange(6)aOut:array([0,1,2,3,4,5])In:a[a>3]#用数组运算进行布尔索引,选出大于3的数组元素Out:array([4,5])3.1.3Numpy数组基本操作实例演示Numpy数组的切片与Python可迭代对象切片有以下不同之处。(3)numpy引入了视图概念:视图是指共享相同数据的不同数组对象。作用:避免了不必要的数据复制,节省了内存。效果:对视图中元素的修改会直接影响到原数组,反之亦然。In:a=np.arange(6)aOut:array([0,1,2,3,4,5])In:b=a[1:4]#对a切片的结果为数组bbOut:array([1,2,3])In:b[0]=-1#改变数组b的索引为0的元素值bOut:array([-1,2,3])In:a#数组a的相应元素发生了改变Out:array([0,-1,2,3,4,5])2.切片尽管数组b是同原数组切片产生的视图,视图与原数组共享数据,但它们仍是独立的对象。各自有自己的维度、形状、大小等属性。3.1.3Numpy数组基本操作实例演示数组的运算包括数组与数的运算,以及数组与数组的运算。数组与数进行运算时,数组的每一个元素会与数进行运算,运算结果会保存到一个新数组,原数组保持不变。数组也可以与数进行比较运算,结果是一个布尔数组。数组与数组运算要求两数组形状相同,对应位置上的元素之间会执行相应的运算。In:a=np.arange(6)b=a+3aOut:array([0,1,2,3,4,5])In:bOut:array([3,4,5,6,7,8])3.运算In:c=a>3cOut:array([False,False,False,False,True,True])In:a=np.arange(1,4)b=np.arange(4,7)a*bOut:array([4,10,18])In:a<bOut:array([True,True,True])3.1.4Numpy函数实例演示一种是numpy模块的函数:np.函数名()另一种是numpy数组的成员函数:数组对象.函数名()有一些函数(如reshape())既是numpy模块的函数,又是数组的成员函数,可以通过两种方式使用。In:a=np.arange(8)b=np.reshape(a,(2,4))#调用numpy模块的函数,传入参数ac=a.reshape(2,4)#调用数组a的成员函数,无须传参数使用形式3.1.4Numpy函数实例演示用于对数组a进行原地排序,即直接修改数组本身,使其元素按照升序排列。In:a=np.random.randint(1,50,size=(6))aOut:array([40,7,8,48,13,49])In:a.sort()In:aOut:array([7,8,13,40,48,49])sort()函数Numpy数组没有降序排序的功能。如要实现降序排序,可以按照如下的方法进行In:a=np.random.randint(1,50,size=(6))a.sort()a=a[::-1]aOut:array([48,45,45,34,14,7])3.1.4Numpy函数实例演示如果要对二维及以上的数组排序,需要用axis参数指定排序的轴。In:a=np.random.randint(1,50,size=(12)).reshape(3,4)a.sort(axis=1)#按轴1排序,在水平方向上排序aOut:array([[17,21,23,29],[9,17,21,28],[6,18,37,44]])In:a=np.random.randint(1,50,size=(12)).reshape(3,4)a.sort(axis=0)#按轴0排序,在竖直方向上排序aOut:array([[1,18,31,2],[18,23,32,13],[32,32,47,39]])sort()函数3.1.4Numpy函数实例演示Numpy用于计算的函数有两类。逐元素操作的函数,对数组中的每个元素分别计算,返回一个新数组。这类函数不会改变数组的整体结构,而是对其中每个元素单独进行计算,如sqrt、sin、cos等。In:a=np.array((4,9,16,25)).reshape(2,2)np.sqrt(a)#对数组的每一个元素求平方根Out:array([[2.,3.],[4.,5.]])用于计算的函数3.1.4Numpy函数实例演示Numpy用于计算的函数有两类。聚合操作,用于将数组中的所有元素进行计算,返回一个标量或指定轴上的累计结果。它可以对整个数组或特定轴进行操作,改变数组的维度,如sum、max等。In:a=np.array((4,9,16,25)).reshape(2,2)np.sqrt(a)Out:array([[2.,3.],[4.,5.]])In:a=np.random.randint(1,10,size=(3,4))aOut:array([[4,4,5,2],[5,4,2,7],[8,8,4,9]])In:a.sum()#未指定参数,对所有元素求和,结果为一个数Out:62In:a.sum(axis=0)#指定轴0,按列求和,结果为一个一维数组Out:array([17,16,11,18])In:a.sum(axis=1)#指定轴1,按行求和,结果为一个一维数组Out:array([15,18,29])用于计算的函数3.1.4Numpy函数实例演示dot()函数用于计算两个数组的点积。对于一维数组,它返回向量的点积;对于二维数组(如矩阵),它返回矩阵乘积。二维数组与一维数组进行点积是二维数组的每一行与一维数组进行点积,其结果是一维数组。In:a=np.array([1,2,3])b=np.array([4,5,6])result=np.dot(a,b)resultOut:32dot()函数In:a=np.arange(6).reshape(3,2)b=np.arange(3,5)result=np.dot(a,b)resultOut[20]:array([4,18,32])3.1.4Numpy函数实例演示二维数组与二维数组进行点积,要求第一个数组的列数等于第二个数组的行数。In:a=np.arange(6).reshape(3,2)b=np.arange(3,9).reshape(2,3)result=np.dot(a,b)resultOut:array([[678][242934][425160]])dot()函数3.1.4Numpy函数实例演示where()函数用于根据条件筛选或生成数组,有两种用法:条件筛选:numpy.where(condition)参数:条件,常用比较运算表示功能:返回满足条件的元素的索引,常用于找出数组中符合条件的位置。In:a=np.array([12,21,32,14,36])b=np.where(a>20)Out:(array([1,2,4],dtype=int64),)#返回满足条件的索引where()函数3.1.4Numpy函数实例演示where()函数用于根据条件筛选或生成数组,有两种用法:条件赋值:numpy.where(condition,x,y)参数:条件,两个数组功能:根据给定的条件返回数组。当条件为真时返回x对应的值,否则返回y对应的值,要求x和y与原数组的形状相同。In:a=np.array([12,21,32,14,36])b=a*2c=a//2d=np.where(a>20,b,c)#第2和第3个参数都是数组Out:array([6,42,64,7,72])
#数组a第一个元素不满足>20的条件,故d的第一个元素是c的第一个元素,其余的依此类推。where()函数3.2Numpy数据类型3.2.1Numpy数据类型概述3.2.2Numpy数据类型转换3.2.1Numpy数据类型概述实例演示常用的数据类型有:整数类型(int8,int16,int32,int64)无符号整数类型(uint8,uint16,uint32,uint64)浮点数类型(float16,float32,float64)复数类型(complex64)如果创建数组时不指定数据类型,将由系统自动确定数据类型。也可以通过参数dtype指定数据类型。In:a=np.arange(6)a.dtypeOut:dtype('int32')In:b=np.random.rand(3)b.dtypeOut:dtype('float64')In:a=np.arange(6,dtype=16)a.dtypeOut:dtype('int16')In:b=np.array([1.1,2.3,3.4],dtype=np.float32)b.dtypeOut:dtype('float32')3.2.2Numpy数据类型转换实例演示astype()方法用于将数组的元素类型转换为指定的类型,并返回一个新的数组,而不改变原数组。astype()方法可以将数组从一种数据类型转换为另一种。当从高精度类型转换为低精度类型时(如float64转int32),可能会丢失数据的精度,需要慎重对待。In:a=np.arange(6)a.dtypeOut:dtype('int32')In:b=a.astype(16)#改变a的数据类型,并创建新数组b.dtypeOut:dtype('int16')In:a=np.random.rand(4)a.dtypeOut:dtype('float64')In:b=a.astype(np.float32)#改变a的数据类型,并创建新数组b.dtypeOut:dtype('float32')3.3Numpy数组广播机制使两个数组的维数相同,且各维度的长度相同用于处理不同形状数组之间运算机理功能3.3Numpy数组广播机制如果两个数组的维数不同,在维数较小的数组前面补1,直到两个数组的维数相同。规则一从左到右逐维检查两个数组的长度,如果长度不同且有一个长度为1,则扩充长度为1的维度,直到两个数组相等;如果长度不同且都不为1,则不能扩充。规则二实例演示In:a=np.arange(6).reshape(3,2)aOut:array([[0,1],[2,3],[4,5]])In:b=np.arange(1,3)bOut:array([1,2])【例3-1】形状为(3,2)的数组a与形状为(2,)的数组b的运算a+b。a的形状为(3,2),b的形状为(2,)首先按照规则一,把数组b的形状扩充为(1,2)。然后按照规则二,将它扩充为3,数组b的形状变为(3,2)。至此,两个数组维数相同,形状相同,可以进行运算。In:a+bOut:array([[1,3],[3,5],[5,7]])实例演示In:a=np.arange(6).reshape(2,3)aOut:array([[0,1,2],[3,4,5]])In:b=np.arange(1,3).reshape(2,1)bOut:array([[1],[2]])【例3-2】形状为(2,3)的数组a与形状为(2,1)的数组b的运算a+b。数组a和b都是二维数组,维数相同,无须扩充。两个数组的第一维长度都是2,无须扩充。数组a的第二维长度为3,数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年党章党史国史国情知识竞赛题库及答案(共190题)
- 溶血三项在新生儿溶血检测中的灵敏度及特异度分析
- 学院食材采购 投标方案(技术方案)
- 电商平台具体业务
- 中医护理学(第5版)课件 第一节 中药方剂基本常识
- 电子商务安全交易规范手册
- 公路建设项目工程可行性研究报告编制办法
- 系统可行性分析包括哪些内容
- 农产品加工与综合利用技术手册
- 品牌建设与营销策略实施方案
- 合金污水管施工方案
- 统编历史七年级下册(2024版)第8课-北宋的政治【课件】j
- 高等数学(慕课版)教案 教学设计-1.3 极限的运算法则;1.4 极限存在准则与两个重要极限
- 2025年淮北职业技术学院单招职业技能测试题库附答案
- 2025届高三化学一轮复习 化学工艺流程题说题 课件
- 第四周主题班会教案38妇女节《“致敬了不起的她”》
- 2025中国福州外轮代理限公司招聘15人易考易错模拟试题(共500题)试卷后附参考答案
- 班主任培训讲座
- 医院化验室管理制度
- 新课标(水平三)体育与健康《篮球》大单元教学计划及配套教案(18课时)
- (2024)湖南省公务员考试《行测》真题卷及答案解析
评论
0/150
提交评论