Python数据分析基础第4章NumPy-数组与矢量计算-课件.pptx

上传人(卖家):三亚风情 文档编号:3604733 上传时间:2022-09-24 格式:PPTX 页数:43 大小:569.42KB
下载 相关 举报
Python数据分析基础第4章NumPy-数组与矢量计算-课件.pptx_第1页
第1页 / 共43页
Python数据分析基础第4章NumPy-数组与矢量计算-课件.pptx_第2页
第2页 / 共43页
Python数据分析基础第4章NumPy-数组与矢量计算-课件.pptx_第3页
第3页 / 共43页
Python数据分析基础第4章NumPy-数组与矢量计算-课件.pptx_第4页
第4页 / 共43页
Python数据分析基础第4章NumPy-数组与矢量计算-课件.pptx_第5页
第5页 / 共43页
点击查看更多>>
资源描述

1、第4章 NumPy 数组与矢量计算学习目标:l 了解NumPy和SciPy作用与安装。l 掌握创建数组对象方法。l 掌握数组的索引、切片和其他操作。l 掌握数组的运算和通用函数使用。l 掌握NumPy矩阵创建、计算和操作。l 掌握随机数生成的方法。NumPy(Numerical Python的缩写)是一个开源的Python科学计算库,它是一个由多维数组对象和用于处理数组的例程集合组成的库。1.NumPy的基本功能如下。提供了一个具有矢量算术运算和复杂广播功能的快速且节省空间的多维数组对象ndarray。用于对数组执行元素级计算以及直接对数组执行数学运算的函数。用于读写硬盘上基于数组的数据集的工

2、具,以及用于操作内存映射文件的工具。提供了线性代数、随机数生成以及傅立叶变换功能。用于集成由C、C+、Fortran等语言编写的代码的工具。在数据分析方面,NumPy还可作为在算法之间传递数据的容器。4.1.1 NumPy简介 2.在Python中使用NumPy的优势 在数值计算时,使用NumPy能够直接对数组和矩阵进行操作。NumPy中数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构。NumPy的大部分代码都是用C语言写成的,这使得NumPy比纯Python代码高效得多。NumPy通常与SciPy(Scientific Python)和Matplotlib(绘图库)一起

3、使用。NumPy是开源的库。4.1.1 NumPy简介 1.测试Python环境中是否安装了NumPy 在Windows操作系统下,按【win】+【r】键,进入cmd命令窗口,输入“python”命令,按回车键,进入Python命令窗口。在Python命令窗口中输入“from numpy import*”命令,如果在命令窗口中出现“ModuleNotFoundError:No module named numpy”的错误提示,则需要安装NumPy。2.在Windows操作系统下安装NumPy方法3.PyCharm 安装 NumPy方法 4.1.2 NumPy安装与测试 SciPy是世界著名的P

4、ython开源科学计算库,它是建立在NumPy基础之上,增加了众多的数学、科学以及工程计算中常用的库函数。它增加的功能包括插值、积分、最优化、统计、线性代数、傅里叶变换、图像处理和常微分方程求解器等一些专用函数。与NumPy库相同,SciPy也是需要单独安装,安装步骤如下。1.测试Python环境中是否安装了SciPy 2.在Windows操作系统下安装SciPy 3.PyCharm 安装SciPy4.1.3 SciPy 简介及其安装与测试 在科学计算中,常常会遇到数组和矩阵的计算,如有两个一维数组x和y,其中,x的值为0-10的整数,y的值为0-10的整数的平方,需要计算x与y的一维数组相加

5、。1.利用Python的循环语句来实现两个一维数组相加示例2.利用NumPy实现两个一维数组相加的示例3.比较两种方法的计算速度4.1.4 NumPy 的简单应用:一维数组相加 NumPy提供了两种基本对象:ndarray(N-dimensional Array Object)和ufunc(Universal Function Object)。其中ndarray是一个多维数组对象,而ufunc则是能够对数组进行处理的函数。NumPy数组一般是同质的(但特殊的数组类型可以是异质的),即数组中所有元素的数据类型必须一致。NumPy数组的下标也是从0开始的。数组元素的数据类型用数据类型对象表示,数据

6、类型对象是numpy.dtype类的实例。4.2.1 创建数组对象 利用NumPy提供的array()函数可以创建一维或多维数组,其基本语法格式如下。numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)其中:object:表示想要创建数组,无默认。dtype:表示数组的所需要的数据类型,默认为None。ndmin:指定生成数组应该具有的最小维数,默认为None。在创建数组时,object是唯一必要的参数,其余参数均为默认的可选参数。4.2.1 创建数组对象创建数组后,选取数组中的某个特定元素的方法如下。数

7、组名m,n 其中m 和 n 为数组元素下标。注意,数组的下标是从0开始。例如在example4-3示例中,创建了一个二维数组arr2,arr2数组元素及与其对应的位置如表4-1、表4-2所示。4.2.2 选取数组元素数组的属性及说明如表4-3 所示4.2.3 数组的属性 说明,数组的shape属性不仅能显示数组的行数或列数,而且还可以调整数组的行和列的大小。1.使用arange()函数创建一维数组2.使用linspace()函数创建数组3.使用logspace()函数创建等比数列4.使用zeros()、eye()、identity()、diag()和ones()函数创建特殊数组5.使用asar

8、ray()函数创建数组6.使用empty()函数创建数组 具体示例见教材。4.2.4 创建数组的其他方法 Python支持的数据类型有整型、浮点型以及复数型,但这些类型不足以满足科学计算的需求,因此NumPy添加了很多其他的数据类型。在实际应用中,为了提高计算结果的准确度,需要使用不同精度的数据类型,并且不同的数据类型所占用的内存空间也是不同的。在NumPy中,大部分数据类型名是以数字结尾的,这个数字表示其在内存中占用的位数。1.NumPy中支持的数据类型 见表4-4 NumPy的基本数据类型及描述4.2.5 Numpy的数据类型2数组的数据类型转换 数组有一个 dtype 属性,通过该属性可

9、以查看数组的数据类型,方法是数组名.dtype。而数组的数据类型在创建数组时就已经通过dtype 参数确定了,如果想实现数组中数值类型的转换可采用 astype()函数。astype()函数的格式如下。数组名.astype(numpy.数据类型)4.2.5 Numpy的数据类型3.自定义数据类型 自定义数据类型是一种异构数据类型,可以将它看作是电子表格的标题行的数据。例如,创建一个存储产品价格信息的数据类型。其中,产品名称是用字符串表示的长度为50个字符,产品价格是用32位单精度浮点数表示。那么,使用自定义数据类型来创建数组的方法如下。(1)使用dtype创建自定义数据类型 (2)查看数据类型

10、,可直接查看或使用numpy.dtype()函数查看 (3)使用array()函数创建数组时,使用dtype指定数组的数据类型为pro_type(自定义数据类型)具体示例见教材4.2.5 Numpy的数据类型1.一维数组的索引与切片 一维数组的操作类似于Python中列表(list)类型的操作。如:一维数组 arr=a0,a1,a2,a3,a4,an 数组索引(下标)0 1 2 3 4 n(1)利用数组索引(下标)获取指定元素 获取数组中指定元素的方法如下。数组名索引(下标)例如,获取数组arr中第4个元素a3用arr3即可。4.3.1 数组的索引和切片1.一维数组的索引与切片(2)数组的切片

11、 截取数组中某个范围之间元素的方法如下。数组名start:end:step 其中,start表示截取数组中开始元素的索引(下标),end表示截取数组中结束元素的索引(下标),但是不包括end索引(下标)所指定的元素,step表示步长。例如,截取arr数组中第2个元素至第5个元素,包括第5个元素,则使用arr1:5。4.3.1 数组的索引和切片2.二维数组的索引与切片 二维数组是由行和列组成,二维数组中的每一行相当于一维数组。二维数组中元素的索引是由该元素所在的行下标和列下标组成,即由元素的行索引和列索引组成。如arr是二维数组,该二维数组元素用arr行索引,列索引表示,该二维数组中元素与索引的

12、对应关系如下。4.3.1 数组的索引和切片(1)利用二维数组的行索引和列索引获取指定元素 方法:数组名行索引,列索引 例如,获取二维数组中第2行第2列的元素,用arr1,1即可。(2)二维数组的切片 截取二维数组中某个区域之间元素的方法:数组名rows_start:rows_end:rows_step,cols_start:cols_end:cols_step 其中:rows_start:rows_end表示截取数组中元素的行索引范围,cols_start:cols_end 表示截取数组中元素的列索引范围,但不包括 rows_end行索引和cols_end列索引所指定的元素,rows_step

13、表示行索引的步长,cols_step表示列索引的步长。4.3.1 数组的索引和切片 示例代码example4-5见教材3.整数索引 整数索引就是从两个序列的对应位置取出两个整数来组成行下标和列下标。示例代码example4-6见教材。4.布尔值索引 当结果对象是布尔运算(例如比较运算符)的结果时,将使用布尔值索引。示例代码example4-7见教材。4.3.1 数组的索引和切片 1.用元组设置维度修改数组的形状方法:数组名.shape=(x0,x1,x2,xn)参数x0-xn表示数组中每个维度上的大小,例如arr.shape=(3,4)表示将arr数组修改成3行4列数组,利用该方法会改变原数组

14、arr的形状。2.reshape()函数 用reshape()函数修改数组的形状方法:数组名.reshape(x0,x1,x2,xn)参数x0-xn表示数组中每个维度上的大小。例如arr.reshape(3,4)生成一个3行4列新数组,而原数组arr不会改变。如果指定的维度和数组的元素数目不吻合,则函数将抛出异常。4.3.2 修改数组形状3.resize()函数 该函数是返回指定大小的新数组。如果新数组的大小大于原始数组的大小,则包含原始数组中的元素的重复副本,该函数修改数组形状方法:数组名.resize(x0,x1,x2,xn)参数x0-xn表示数组中每个维度上的大小。例如arr.resiz

15、e(3,4)表示将arr数组修改成3行4列数组,原数组arr形状改变。这种方法与用shape属性修改数组的形状相似。4.修改数组的形状示例代码example4-8见教材。4.3.2 修改数组形状1.ravel()函数 在NumPy中,可以使用ravel()函数将多维数组展平(即变成一维数组),展平数组元素的顺序通常是“C风格”的,就是以行为基准。用ravel()函数展平数组的方法:数组名.ravel()例如arr.ravel()返回将arr数组展平成一维新数组视图,原数组arr不改变。2.flatten()函数 flatten()函数也是将多维数组展平,用flatten()函数展平数组的方法:

16、数组名.flatten()例如arr.flatten()表示将arr数组展平成一维新数组,原数组arr不改变。3.数组的展平示例代码example4-9见教材。4.3.3 数组的展平1.transpose()函数 该函数可实现翻转给定数组的维度,并且返回数组的1个视图(view)。使用transpose()函数的方法:numpy.transpose(arr)参数arr表示是要转置的数组。例如arr是一个3行5列数组,numpy.transpose(arr)函数就会返回arr数组转置为5行3列的数组视图,而原数组arr不改变。2.ndarray.T函数 该函数是属于ndarray类,作用类似于n

17、umpy.transpose4.3.4 数组转置和轴对换3.rollaxis()函数 该函数可实现向后滚动特定的轴,直到1个特定位置。使用rollaxis()函数方法:numpy.rollaxis(arr,axis,start)该函数中参数arr表示数组,axis表示要向后滚动的轴,其它轴的相对位置不会改变,start表示滚动到特定位置,默认为零,表示完整的滚动。4.swapaxes()函数 该函数是交换数组的两个轴。对于1.10之前的NumPy 版本,会返回交换后数组的视图。使用swapaxes()函数的方法:numpy.swapaxes(arr,axis1,axis2)参数arr表示数组,

18、axis1表示对应第1个轴的整数,axis2表示对应第2个轴的整数。5.翻转数组的示例代码example4-10见教材。4.3.4 数组转置和轴对换1.concatenate()函数 该函数是用于沿指定轴连接相同形状的两个或多个数组。使用concatenate()函数的方法:numpy.concatenate(arr1,arr2,arrn),axis)参数arr1,arr2arrn表示是相同维度的数组序列,axis表示沿着它连接数组的轴,默认为 0。2.stack()函数 该函数能实现沿新轴连接数组序列。此功能添加自NumPy版本1.10.0。使用stack()函数的方法:numpy.stac

19、k(arrays,axis)参数arrays表示相同形状的数组序列,axis表示返回数组中的轴,输入数组沿着它来堆叠。4.3.5 数组的连接3.hstack()函数 该函数可通过堆叠来生成水平的单个数组。使用hstack()函数的方法:numpy.hstack(arrays)参数arrays表示相同形状的数组序列。4.vstack()函数 该函数可通过堆叠来生成竖直的单个数组。使用vstack()函数的方法:numpy.vstack(arrays)参数arrays表示相同形状的数组序列。5.数组的连接代码 数组的连接示例示例example4-11见教材。4.3.5 数组的连接1.split()

20、函数 该函数是沿特定的轴将数组分割为子数组。使用split()函数的方法:numpy.split(arr,indices_or_sections,axis)参数arr表示被分割的数组,indices_or_sections表示从arr数组创建的大小相同的子数组的数量,可以为整数。如果此参数是一维数组,则该参数表示在arr数组中的分割点,arr数组将按照分割点来分割数组。axis表示返回数组中的轴,默认为 0,表示竖直方向分割,1表示水平方向分割。4.3.6 数组的分割2.hsplit()函数 该函数是split()函数的特例,它是将数组沿着水平方向分割,即将一个数组按列分割为多个子数组。使用h

21、split()函数的方法:numpy.hsplit(arr,indices_or_sections)参数arr表示被分割的数组,indices_or_sections表示将arr数组创建为大小相同的子数组的数量。如果此参数是一维数组,则该参数表示在arr数组中的分割点,arr数组将按照分割点来分割数组。4.3.6 数组的分割3.vsplit()函数 该函数是split()函数的特例,它是将数组沿着竖直方向分割,即将一个数组按行分割为多个子数组。使用vsplit()函数的方法:numpy.vsplit(arr,indices_or_sections)参数arr表示被分割的数组,indices_o

22、r_sections表示将arr数组创建为大小相同的子数组的数量。如果此参数是一维数组,则该参数表示在arr数组中的分割点,arr数组将按照分割点来分割数组。4.数组的分割示例example4-12见教材。4.3.6 数组的分割 在NumPy中,数组转换有两种方式,一种是将数组转换成列表,另一种就是转换数组的数据类型。其中,转换数组的数据类型是用astype()函数,另一种是将数组转换成列表的方法。将数组转换成列表是用tolist()函数,使用tolist()函数的方法如下。数组名.tolist()示例代码见教材。4.3.7 数组转换1.append()函数 该函数是在数组的末尾添加元素,该函

23、数会返回一个新数组,而原数组不变。使用append()函数的方法:numpy.append(arr,values,axis)参数arr表示输入的数组,values表示向arr数组添加的元素,axis表示沿着水平或竖直方向完成添加操作的轴。axis取0表示向竖直方向操作,values数组列维度与arr数组列维度相同;axis取1表示向水平方向操作,values数组行维度与arr数组行维度相同。如果未提供axis值,在添加操作之前输入数组会被展开,values可以是单元素,也可以是任意数组,将values添加到arr数组后,该函数会返回一个新数组,而原数组不变。append()函数的示例代码exa

24、mple4-13见教材。4.3.8 添加删除数组元素2.insert()函数 该函数在给定索引之前,沿给定轴在输入数组中插入值。该函数会返回一个新数组,原数组不变。使用insert()函数的方法:numpy.insert(arr,obj,values,axis)其中,参数arr表示输入的数组,obj表示在其之前插入值的索引,values表示向arr数组插入的值。insert()函数的示例代码example4-14见教材。3.delete()函数 该函数返回从输入数组中删除指定子数组的新数组,原数组不变。与insert()函数的情况一样,如果未提供轴参数,则输入数组将展开。使用delete()函

25、数的方法:numpy.delete(arr,obj,axis)其中,参数arr表示输入的数组,obj是用整数或者整数数组表示的从输入数组中删除的子数组,axis表示沿着它删除给定子数组的轴,如果未提供axis值,则输入数组会被展开。delete()函数的示例代码example4-15。4.3.8 添加删除数组元素 在NumPy中,数组可以直接进行加、减、乘、除、指数运算、求倒数、取相反数、位运算等运算。1.相同形状数组的运算 示例代码example4-162.不同形状数组的运算(广播机制)如果两个数据的形状(shape)不一致时,低维数组会自动将维度扩充到与高维数组一致,然后再按元素逐个运算,

26、这就是数组的广播机制。为了更好地使用广播机制,需要遵循4个原则。示例代码见教材。3.数组和标量之间的运算 在NumPy中,数组和标量之间的算术运算就是将这个标量值传播到数组的各个元素,即将数组中的每个元素都与标量进行运算。4.4.1 数组的运算 NumPy中的ufunc对象也称为ufunc函数,它包含了对数组进行处理的通用函数。通用函数(ufunc)是针对ndarray数组对象执行元素级运算的函数,即通用函数会对数组中的每一个元素值作用后产生新的元素值,并返回新的元素值组成的数组,因此,通用函数(ufunc)都是以NumPy数组作为输出。常用的一元通用函数说明见教材表4-6 常用的二元通用函数

27、说明见教材表4-7【例4-1】定义arr为0至9的一维数组,运用通用函数完成下列计算。见示例代码test4-1。4.4.2 通用函数(ufunc)NumPy中的矩阵对象为matrix,它包含有矩阵的数据处理,矩阵计算,转置,可逆性等功能。matrix是ndarray的子类,矩阵对象是继承自NumPy数组对象的二维数组对象,因此,矩阵会含有数组的所有数据属性和方法。但是,矩阵与数组还是有一些重要的区别。(有关区别可参见教材)1.矩阵的创建 在NumPy中,使用mat()、matrix()以及bmat()函数创建矩阵。(1)使用字符串创建矩阵 在mat()函数中输入一个Matlab风格的字符串,该

28、字符串以空格分隔列,以分号分隔行。如numpy.mat(1 2 3;4 5 6;7 8 9),可创建一个3行3列矩阵,矩阵中元素为整数。4.5 NumPy矩阵创建、计算及操作1.矩阵的创建(2)使用嵌套序列创建矩阵 在mat()函数中输入嵌套序列,如numpy.mat(2,4,6,8,1.0,3,5,7.0),可创建一个2行4列的矩阵,矩阵中的元素为浮点数。(3)使用一个数组创建矩阵 在mat()函数中输入数组,如numpy.mat(numpy.arange(9).reshape(3,3),可创建一个3行3列的矩阵,矩阵中的元素为整数。(4)使用matrix()函数创建矩阵 matrix()函

29、数可以将字符串、嵌套序列、数组和matrix转换成矩阵。其函数格式:matrix(data,dtype=None,copy=True)4.5 NumPy矩阵创建、计算及操作1.矩阵的创建(5)使用bmat()函数创建矩阵 如果想将小矩阵组合成大矩阵,在NumPy中,可以使用bmat分块(block matrix)矩阵函数实现。其函数格式:bmat(obj,ldict=None,gdict=None)其中,obj为matrix。参数ldict和gdict为None。示例代码example4-174.5 NumPy矩阵创建、计算及操作2.矩阵的计算及操作 在NumPy中,矩阵的计算是针对整个矩阵中

30、的每个元素进行的,不需要使用for循环,而且运算效率更高。在矩阵的加、减、除法运算时,只有相同的行数和列数矩阵才能相互进行计算,否则会抛出程序异常。矩阵的乘法计算有计算矢量积和计算数量积两种方式,如果计算矢量积,则运算符采用星号(*),并且星号左边矩阵的列数要与星号右边矩阵的行相等,运算结果是矩阵中对应元素相乘的累加和。如果计算数量积,也称为矩阵的点乘操作,则使用multiply函数。矩阵常用的操作有矩阵转置、索引取值、求矩阵的行列数、排序和将列表转换成矩阵等。矩阵计算及操作示例代码example4-18。4.5 NumPy矩阵创建、计算及操作 利用NumPy中的random模块生成随机数。n

31、umpy.random模块提供了非常全的自动产生数据的API,通过该模块中的函数可以很方便地生成随机数。1.使用rand()函数 rand()函数格式:numpy.random.rand(d0,d1,.,dn)该函数作用生成一个(d0,d1,.,dn)维的数组,数组的元素取自0,1)内均匀分布的随机数,但数组的元素不包括1。若没有参数输入,则生成一个数。括号里面的参数是指定产生数组的形状。2.randn()函数 randn()函数格式:numpy.random.randn(d0,d1,.,dn)该函数作用生成一个(d0,d1,.,dn)维的数组,数组的元素是标准正太分布随机数。若没有参数输入,

32、则生成一个数。括号里面的参数是指定产生数组的形状。4.6 随机数生成3.randint()函数 randint()函数格式:numpy.random.randint(low,high,size,dtype)该函数作用生成指定范围的随机数,随机数取值区间为low,high),若没有输入参数high则取值区间为0,low)。size参数是元组,用于确定数组的形状,dtype用于指定数组中数据类型。4.random()函数 random()函数格式:numpy.random.random(size=None)该函数作用产生0.0,1.0)之间的浮点数,但数组的元素不包括1。size表示生成元素个数。

33、若没有参数输入,则生成一个数。生成随机数的示例代码example4-194.6 随机数生成项目实践项目描述项目描述 完成下列数组、矩阵和随机数的操作与运算。(1)创建2行4列的数组arr_a,数组中的元素为0至7,要求用arange()函数创建。(2)利用生成随机数函数创建有4个元素的一维数组arr_b。(3)计算arr_a和arr_b的矢量积和数量积。(4)将数组的数量积中小于2的元素组成新数组。(5)将arr_a和arr_b转换成矩阵,计算矩阵的矢量积和数量积。(6)向arr_a数组添加元素9,10后,再赋值给arr_a数组。(7)在arr_a数组第3个元素之前插入11,12元素后,再赋值

34、给arr_a数组。(8)从arr_a数组中删除下标为奇数的元素。(9)将arr_a数组转换成列表。本章小结 本章首先介绍了NumPy和SciPy作用,以及在Windows操作系统下安装NumPy、SciPy软件包和在PyCharm开发工具下安装 NumPy、SciPy的方法。主要介绍了数组对象的基本概念,包括创建数组对象、选取数组元素、数组的属性和Numpy的数据类型等。重点介绍了NumPy数组操作,包括数组的索引和切片、修改数组形状、数组的展平、数组转置和轴对换、数组的连接、数组的分割、数组转换和添加删除数组元素等。同时,还介绍了NumPy数组的矢量计算方法,NumPy矩阵创建、计算及操作和随机数生成等。谢谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(Python数据分析基础第4章NumPy-数组与矢量计算-课件.pptx)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|