第5章 NumPy模块的基础与应用_第1页
第5章 NumPy模块的基础与应用_第2页
第5章 NumPy模块的基础与应用_第3页
第5章 NumPy模块的基础与应用_第4页
第5章 NumPy模块的基础与应用_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

第5章NumPy基础与应用主讲人:***13-10月-23Python数据分析与数据挖掘目录contents数组基础0102数组的相关操作03数组读写数组基础015.1Numpy简介NumPy是Python的一个基础科学计算包,是许多高级的第三方科学计算的模块,如:Matplotlib、Pandas等,都是基于NumPy所构建的。它包含以下几个特点:强大的多维数组对象;精细而复杂的功能;用于集成C/C++和Fortran代码的工具;实用的线性代数,傅里叶变换和随机数功能。对于许多用户,尤其是Windows用户,学习Python的常用工具为Anaconda,其中包括所有数据分析的关键包,不需要再次安装,但可以在命令行中使用pip更新:

pipinstallnumpy–U

可以在/doc/stable/上查阅NumPy的使用文档。5.2NumPy数组基础数组是NumPy中的核心类型,全称为N维数组(N-dimensionalArray,ndarray),整个NumPy模块都是围绕数组来构建的,它是一个固定大小和形状的大数据集容器,该对象由两部分组成:(1) 实际的数据;(2) 描述这些数据的元数据;大部分的数组操作仅仅修改元数据的部分,而不改变底层的实际数据。

NumPy.array和标准的Python库中的Array.array是不一样的,标准的Python库中的Array.array只能处理一维数组,且所有元素的类型必须是一致的,支持的数据类型有整型、浮点型以及复数型,但这些类型不能够满足科学计算的需求,因此NumPy中添加了许多其他的数据类型,如bool、int、int64、float32、complex64等。

同时,NumPy数组有许多特有的属性。(见表5-1)5.2.1数组的属性属性说明.ndim秩,即轴的数量或维度的数量.shapendarray对象的尺度,对于矩阵,n行m列.sizendarray对象元素的个数,相当于.shape中n*m的值.dtypendarray对象的元素类型.itemsizendarray对象中每个元素的大小,以字节为单位.nbytesndarray对象中元素连续内存的大小表5-1NumPy数组常见属性列表5.2.1数组的属性-实例importnumpyasnparray=np.array([[1,2,3],[4,5,6]])#定义数组print(array.ndim)#查看数组的秩print(array.shape)#查看数组的形状print(array.size)#查看数组元素个数print(array.dtype)#查看数组元素类型print(array.itemsize)#查看元素所占字节print(array.nbytes)#数组所占内存大小运行结果:2(2,3)6int32424[例5-1]构建一个二维数组arr,并查看数组的属性特点。5.2.1数组的属性-实例[思考题]构建一个二维数组arr,请写出数组属性的输出结果。importnumpyasnp#定义数组array=arr=np.array([[iforiinrange(5)],[iforiinrange(5,10)]])print(array.ndim)#查看数组的秩print(array.shape)#查看数组的形状print(array.size)#查看数组元素个数print(array.dtype)#查看数组元素类型print(array.itemsize)#查看元素所占字节print(array.nbytes)#数组所占内存大小运行结果:2(2,5)10int324405.2.2创建数组在使用数组前,必须首先导入NumPy模块。导入格式:importnumpyasnp1、利用np.array()函数生成数组利用np.array()函数来创建,函数的参数可以是元组、列表,也可是另一个数组。语法格式为:X=np.array(list/tuple)或者X=np.array(list/tuple,dtype=np.dtype)注:当np.array()不指定dtype时,NumPy将根据数据情况自动匹配一个dtype类型。[例5-2]以列表创建:a=np.array([1,2,3,4]) d=np.array([[1,2,3],[4,5,6]])

[例5-3]以元组创建:b=np.array((1,2,3,4),dtype=np.float32)以列表+元组创建:c=np.array([[1,2],[3,4],(0.1,0.8)])注:若数值类型不同时,会将其合并为类型范围较大的一种5.2.2创建数组2、利用内置函数产生特定形式的数组函数说明np.arange(n)类似range()函数,返回ndarray类型,元素从0到n-1np.ones(shape)根据shape生成一个全1数组,shape是元组类型,默认浮点型np.zeros(shape)根据shape生成一个全0数组,shape是元组类型,默认浮点型np.full(shape,val)根据shape生成一个数组,每个元素值都是valnp.eye(n)创建一个正方的n*n单位矩阵,对角线为1,其他为0表5-2NumPy常见内置函数2、利用内置函数产生特定形式的数组1)

np.zeros()函数、np.ones()函数和np.eye()函数:

语法:X=np.xxx(shape,dtype=float)注:np.zeros()函数是生成一个数值全为零的数组,其中的行列数可以自定义。数值类型默认为浮点型。np.ones()函数用法与np.zeros()函数完全相同,只有数值不同。[例5-4]使用np.zeros()函数创建全0数组。5.2.2创建数组5.2.2创建数组2、利用内置函数产生特定形式的数组2)np.arange()函数

语法:X=np.arange([start,]stop[,step,],dtype=None)注:np.arange()函数可以产生一个等距数组,其中:[]内的内容可省略,start的默认值为0,step的默认值为1。故而,参数个数可以为1个、2个或3个。

当只含一个参数时,即只有stop参数,此时将生成一个从0到stop-1,步长为1的整数数组。【例5-5-Part1】当含2个参数时,即指定起始位置,生成一个从start到stop-1,步长为1的整数数组。【例5-5-Part2】当含3个参数时,即指定起始位置与步长,生成一个从start到stop-1,步长为定值的数组,指定的步长可以是浮点型。【例5-5-Part3】[例5-5]使用np.arange创建数组,分别带有1个参数、2个参数和3个参数。首先创建只带一个参数的,代码及输出结果如下:【例5-5-Part1】【例5-5-Part2】【例5-5-Part3】5.2.2创建数组2、利用内置函数产生特定形式的数组3)np.linspace()函数:

语法:np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)注:Numpy中的linspace函数可以用来创建由等差数列构成的一维数组。相关的参数以及说明见下一张PPT表格。5.2.2创建数组2、利用内置函数产生特定形式的数组3)np.linspace()函数:表5-3linspace函数的参数及说明5.2.2创建数组[例5-6]使用linspace函数生成均匀分布的数组,代码及输出结果如下:2、利用内置函数产生特定形式的数组3)np.linspace()函数:5.2.2创建数组4)np.empty()函数:注:np.empty()函数是生成一个指定形状和类型且全为空的数组,该函数只是让系统分配指定大小的内容,而并没有初始化,里面的值是随机的。[例5-7]使用np.empty生成一个指定形状和类型且全为空的数组,代码及输出结果如下:2、利用内置函数产生特定形式的数组5.2.2创建数组3、生成随机数组1)

numpy.random.rand(d0,d1,...,dn)函数注:创建给定形状的数组,并使用[0.0,1.0)上均匀分布的随机浮点数填充该数组。当函数没有参数时,返回一个随机浮点数,当函数有一个参数时,返回该参数长度大小的一维随机浮点数数组,当函数有两个及以上参数时,则返回对应维度的数组。2)numpy.random.randint(low,high=None,size=None,dtype=int)函数注:返回随机整数数组,数据值位于半开区间[low,high)。可以用size设置数组的形状,例如,若size为(m,n,k),则绘制m*n*k形状的样本。size默认值为“None”,在这种情况下,将返回单个值。5.2.2创建数组3、生成随机数组3)numpy.random.randn(d0,d1,...,dn)函数注:返回一个或一组服从标准正态分布的随机样本值。当函数没有参数时,则返回一个浮点数,当函数有一个参数时,则返回秩为1的数组,不能表示向量和矩阵,当函数有两个及以上参数时,则返回对应维度的数组,能表示向量或矩阵。此外,np.random.standard_normal()函数与np.random.randn()类似,但是np.random.standard_normal()的输入参数为元组(tuple)。5.2.2创建数组3、生成随机数组4)

numpy.random.shuffle(x)函数注:类似洗牌操作,修改参数x。参数x为要洗牌的数组、列表或可变序列。5)numpy.random.permutation(x)函数注:随机排列一个序列,或返回一个排列的范围。如果x是一个多维数组,则它只会沿着其第一个索引移动。5.2.2创建数组3、生成随机数组[例5-8]使用random模块生成随机数组,代码及输出结果如下:5.2.3数组的数据类型数据类型说明bool布尔类型,true或falseintc与C语言中的int类型一致,一般是int32或int64intp用于索引的整数,int32或int64int8字节长度的整数,取值:[‐128,127]int1616位长度的整数,取值:[‐32768,32767]int32int64uint88位无符号整数,取值:[0,255]uint1616位无符号整数,取值:[0,65535]uint32uint64float1616位半精度浮点数:1位符号位,5位指数,10位尾数float3232位半精度浮点数:1位符号位,8位指数,23位尾数float6464位半精度浮点数:1位符号位,11位指数,52位尾数complex64复数类型,实部和虚部都是32位浮点数complex128复数类型,实部和虚部都是64位浮点数表5-4数组的数据类型5.2.3数组的数值类型[例5-9]创建整型和浮点型的混合类型数组,NumPy会将其统一改为浮点型。

当使用元组或列表时作为创建数组的参数时,若数据类型不同,会将其类型统一为类型范围较大的一种,即当传入的数据有多种类型时,NumPy会自动进行判断,将数组转化为最为通用的类型。5.2.4数组的迭代一维数组:迭代返回对应数组中的每一个元素。多维数组:迭代返回值是一个维度减一的数组。多维数组:可以进行列迭代和逐个元素迭代。行迭代[例5-10]一维和多维数组迭代。[例5-11]多维数组的列迭代和逐个元素迭代。列迭代逐个迭代5.2.5数组的索引和切片1、一维数组的索引

一维数组的索引与列表类似,不仅支持单个元素的索引,还支持负数索引与切片,负索引或切片后得到的结果仍是一个数组,可以进行数组的相关操作。[例5-12]一维数组索引。2、多维数组的索引---多重索引单个元素:array[行数][列数]某一行元素:array[行数]或array[行数,:]某一列元素:array[:,列数]某几行和某几列:[起始行:终止行,起始列:终止列][例5-13]多维数组索引。5.2.5数组的索引和切片1、合并 在水平方向上,一般采用hstack()函数实现两个数组的合并。 具体语法为:np.hstack((a,b))。 此外,concatenate(axis=1)函数和column_stack()函数可以实现类似的效果。[例5-14]数组水平方向上的合并。5.2.6数组的合并和拆分1、合并

在竖向方向上,一般采用vstack()函数实现两个数组的合并。

具体语法为:np.vstack((a,b))。

当参数axis设置为0时,concatenate()函数可以得到同样的结果。row_stack()函数亦如是。除此之外,还有一种是深向合并的操作,它是沿着第三个坐标轴的方向来合并,使用到的函数是dstack()。[例5-15]数组竖向及深向上的合并。5.2.6数组的合并和拆分2、拆分

水平拆分:对于一个n*m的数组,可以沿着水平方向将其拆分为m部分,并且各部分的大小和形状完全相同:hsplit()、split(axis=1)

竖向拆分:对于一个n*m的数组,也可以沿着竖向(按行)将其拆分为n部分,并且各部分的大小和形状完全相同:vsplit()、split(axis=0)

深向拆分:对于一个n*m的数组,也可以沿着深向将其拆分为n部分:dsplit()5.2.6数组的合并和拆分[例5-16]数组的拆分。5.2.6数组的合并和拆分数组的相关操作025.3.1统计相关操作NumPy提供了很多统计函数,可以支持对数组的多种统计操作。例如,从数组中查找最小元素,最大元素,计算均值、标准差和方差等。

常见的统计函数及说明见表5-5。函数说明.sum()数组求和,默认对所有元素求和.prod()数组求积,默认对所有元素求积.max()和.min()求数组元素中的最大值或者最小值.argmax()和.argmin()求数组元素中的最大值或者最小值的位置.mean()求数组所有元素的均值.std()和.var()求数组元素中的标准差或方差表5-5数组的统计操作[例5-17]数组统计相关操作实例。5.3.1统计相关操作1、修改数组形状:.shape属性[例5-18]使用.shape属性修改数组形状。5.3.2形状相关操作5.3.2形状相关操作2、不改变数组自身形状的方法:reshape()方法 reshape()方法也可以实现类似.shape属性的效果,但是它不改变原数组的形状,并返回一个新的数组。注意:形状参数必须与数组大小一致,否之会抛出异常。 reshape()方法可以接受一个“-1”作为参数,当某一维度是-1时,NumPy会自动根据其他维度来计算这一维度的大小。[例5-19]使用.reshape()方法不改变原数组形状。[例5-20]使用“-1”作为.reshape()参数。3、改变数组自身形状的方法:.resize()方法.resize()方法的作用与reshape()方法的功能一致,但改变原来数组的形状。它的原理是首先将原来数组转变为一维数组,再判断元素的个数,若缺失,则缺失元素以0补全;若过满,则只截取所需元素,从而实现对数组形状的修改。注意:.resize()方法不支持-1参数。[例5-21]使用.resize()方法改变数组自身形状。5.3.2形状相关操作4、数组的转置:.T属性和.transpose()方法对于数组而言,转置可以通过.T属性和.transpose()方法实现。一般情况下,这两种方法是等价的。对一维数组而言,转置返回它的本身;对于二维数组而言,转置相当于将其行列互换;对于多维数组而言,转置是将所有的维度反向,原来的第一维变为最后一维,原来的最后一维变成第一维。[例5-22]数组的转置。5.3.2形状相关操作5、数组的降维:.flat属性、.flatten()方法和.revel()方法数组的降维是针对多维数组而言的,可以利用.flat属性得到数组中的一个一维引用数组,同时,此属性支持修改对应数值,从而使原数组的对应位置有相应的改变。.flatten()方法和.revel()方法也可以实现将数组返回一维化的结果,但是.flatten()方法返回的是原数组的一个复制,修改它对原数组不产生影响。.revel()方法是返回引用,只有在必要时返回复制。[例5-23]数组的降维。5.3.2形状相关操作5.3.3四则运算&点乘&比较操作[例5-24]数组的四则运算、点乘与比较操作。数组与数字之间的四则运算,规则是数组元素分别对应进行相应运算。[例5-24]数组的四则运算、点乘与比较操作。数组与数组之间也可以进行四则运算,前提是参与运算的数组需有相同的行列。运算规则是按位运算,对应位置进行运算。此外,数组还支持幂运算、取余和取整运算。5.3.3四则运算&点乘&比较操作[例5-24]数组的四则运算、点乘与比较操作。在数学上,二维数组可以看成矩阵,一维数组可以看成向量,它们还支持点乘运算,用.dot()函数实现。5.3.3四则运算&点乘&比较操作[例5-24]数组的四则运算、点乘与比较操作。数组还支持其他运算,例如,比较和逻辑操作。在比较操作中,数组可以与一个数进行比较,会返回一个布尔型的数组;数组与数组之间也可以进行比较,返回一个布尔型数组。5.3.3四则运算&点乘&比较操作数组读写035.4.1数组的读取

从文本文件中读取数据:np.loadtxt()函数。语法格式为:numpy.loadtxt(fname,dtype=<class'float'>,comments='#',delimiter=None,converters=None,skiprows=0,usecols=None,unpack=False,ndmin=0,encoding='bytes',max_rows=None,*,like=None)

说明如表5-6。[例5-25]从文本文件中读取数据,读出的数据为数组类型。首先读取data目录下以空格分隔数据的test.txt文件。5.4.1数组的读取如果文件中的数据不是空格分隔,可以设置参数delimiter指定分隔符。文件格式:1,2,3,4,5,67,8,9,10,11,12如果文件中的含有字符串的数组,可以加上一个参数值。文件格式:

namepricemysql18python205.4.1数组的读取

如果文件中包含字符串和数值型的混合数据(如test2.txt中,有'gender','age','weight'三列数据),可以如下指定数据类型进行读取。5.4.1数组的读取将数组写入文件:np.savetxt(),写入时默认使用科学记数法的形式保存数字。语法格式如下:np.savetxt(fname,X,fmt='%.18e',delimiter='',newline='\n',header='',footer='',comments='#',encoding=None)说明如下表。存入文件数据[例5-26]数组的写入。首先使用默认参数,将一个二维数组写入文件,代码如下:5.4.2数组的写入可以使用fmt参数设置数据写入的格式可以用delimiter参数指定分隔符存入文件数据存入文件数据5.4.2数组的写入本章实践例题本章实践例题[例5-27]数组生成实例。本例介绍了几种常用的数组生成方法,包括生成随机数数组、生成均匀分布的数组等。实例代码如下:本章实践例题[例5-27]数组生成实例。本例介绍了几种常用的数组生成方法,包括生成随机数数组、生成均匀分布的数组等。实例代码如下:本章实践例题[例5-28]数组索引及切片实例。本例介绍了如何通过索引

温馨提示

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

评论

0/150

提交评论