版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章Numpy基础与实战11.2数组运算11.3数组的存取
11.1多维数组对象ndarray11.1多维数组对象ndarray11.1多维数组对象ndarrayNumpy提供了两种基本的对象:ndarray:英文全称为n-dimensionalarrayobject,称为多维数组,后统一称之为数组。ufunc:英文全称为universalfunctionobject,它是一种能够对数组进行处理的特殊函数。Numpy库的核心对象是n维数组对象ndarray,Python中所有的函数都是围绕ndarray对象进行的。ndarray数组能够对整块数据进行数学运算,通常来说,ndarray是存储单一数据的容器,即其中的所有元素都需要是相同的类型,和list不同,它能直接保存数据,而list保存的是对象的引用。11.1多维数组对象ndarray1.
创建ndarray对象1)数组的属性属性含义ndim数组的维度shape数组的维度大小,返回元组。对于n行m列的数组,维度大小为(n,m)size数组中元素的总数,等于行数乘以列数dtype数组的元素类型itemsize数组的每个元素的大小(以字节为单位)data生成指向数组首地址的一个memoryview对象
2)数组的创建创建数组最简单的方法就是使用Numpy提供的array()函数,通过给array()函数传递序列对象来创建数组,如果传递的是多层嵌套的序列,则创建多维数据在创建数组时,numpy会为新建的数组推断出一个合适的数据类型,并保存在dtype属性中。11.1多维数组对象ndarrayIn[1]importnumpyasnpdata1=[1,2,3,4]arr1=np.array(data1)arr1Out[1]array([1.,2.,3.,4.])11.1多维数组对象ndarrayIn[2]data2=[[1,2,3],[4,5,6]]arr2=np.array(data2)arr2Out[2]array([[1,2,3],
[4,5,6]])In[3]arr2.ndimOut[3]2In[4]arr2.shapeOut[4](2,3)In[5]arr2.sizeOut[5]6In[6]arr2.dtypeOut[6]dtype('int32')2.
变换数组的形状在对数组进行操作时,经常要改变数组的维度。可以通过修改数组的shape
属性,在保持数组元素个数不变的情况下,改变数组每个轴的长度。In[9]arr2.shape=(3,2)arr2Out[9]array([[1,2],[3,4],[5,6]])In[10]arr2.shape=(1,-1)arr2Out[10]array([[1,2,3,4,5,6]])11.1多维数组对象ndarray11.1多维数组对象ndarrayndarry对象提供了ravel()方法来将数组横向展平,flatten()方法来将数组纵向展平。这两个方法都不影响原始数组。示例如下:In[13]arr4=arr2.ravel()arr4Out[13]array([10,2,3,4,5,6])In[14]arr5=arr2.flatten()arr5.shapeOut[14](6,)11.1多维数组对象ndarray3.
数组的组合和分割除了可以改变数组“形状”外,numpy也可以对数组进行组合。组合主要有横向与纵向组合。可以使用hstack()、vstack()以及concatenate()来完成数组的组合。横向组合是将ndarry对象构成的元组作为参数,传给hstack()函数。纵向组合同样是将ndarray对象构成的元组作为参数,传给vstack()函数。concatenate()函数也可以实现数组的横向组合和纵向组合,其中参数axis=1时按照横向组合,axis=0时按照纵向组合。
11.1多维数组对象ndarrayIn[15]a=np.array(([1],[2],[3]))b=np.array([[4],[5],[6]])np.hstack((a,b))Out[15]array([[1,4],[2,5],[3,6]])In[16]np.vstack((a,b))Out[16]array([[1],[2],[3],[4],[5],[6]])11.1多维数组对象ndarray
除了可以对数组进行横向和纵向组合,还可以对数组进行分割。Numpy提供了hsplit()、vsplit()、dsplit()和split()函数,可以将数据分割成相同大小的子数组,还可以指定原数组中需要分割的位置。
hsplit()按照横向分割数组,vsplit()按照纵向分割数据,split()可以指定分割轴向,dsplit()要求数组的维度是3及以上。11.1多维数组对象ndarrayIn[17]a=np.arange(16).reshape(4,4)np.hsplit(a,2)Out[17][array([[0,1],[4,5],[8,9],[12,13]]),array([[2,3],[6,7],[10,11],[14,15]])]In[18]np.split(a,[2,3],axis=0)#按照纵向分割,分隔位置第2行、第3行Out[18][array([[0,1,2,3],[4,5,6,7]]),array([[8,9,10,11]]),array([[12,13,14,15]])]11.1多维数组对象ndarray4.
自动生成数组前面的例子都是先创建一个Python的序列对象,然后通过array()函数将其转换为数组,这样做显然效率不高。因此numpy提供了很多专门用于创建数组的函数。
arange()类似于内置函数range(),通过指定开始值、终值和步长来创建表示等差数列的一维数组,注意所得到的结果中不包含终值。In[20]np.arange(10)Out[20]array([0,1,2,3,4,5,6,7,8,9])In[21]np.arange(1,13,2)Out[21]array([1,3,5,7,9,11])11.1多维数组对象ndarray
linspace()通过指定幵始值、终值和元素个数来创建表示等差数列的一维数组,可以通过endpoint参数指定是否包含终值,默认值为True,即包含终值。示例如下:In[22]np.linspace(1,10,10)Out[22]array([1.,2.,3.,4.,5.,6.,7.,8.,9.,10.])In[23]np.linspace(1,10,10,endpoint
=
False)Out[23]array([1.,1.9,2.8,3.7,4.6,5.5,6.4,7.3,8.2,9.1])11.1多维数组对象ndarray
logspace()和linspace()类似,通过指定开始指数、结束指数和元素个数来创建表示等比数列的一维数组,可以通过指定base参数来确定底数,默认为10,还可以通过endpoint参数确定是否包括结束指数,默认为True,表示包含。In[24]np.logspace(0,3,4)Out[24]array([1.,10.,100.,1000.])In[25]np.logspace(0,3,4,base
=
2)Out[25]array([1.,2.,4.,8.])11.1多维数组对象ndarrayzeros()、ones()、empty()可以创建指定形状和类型的数组。其中empty()只分配数组所使用的内存,当并不对数组元素进行初始化操作,因此它的运行速度是最快的。zeros()将数组元素初始化为0,ones()将数组元素初始化为1。eye()用来生成主对角线上的元素为1,其它元素为0的数组,diag()创建类似对角的数组,主对角线上的元素可以指定。5.随机数函数numpy提供了强大的生成随机数的功能,然而,真正的随机数很难获得,实际中使用的都是伪随机数。大部分情况下,伪随机数就能满足要求。与随机数相关的函数都在random模块中,其中包含了可以生成服从多种概率分布随机数的函数。11.1多维数组对象ndarray函数含义random()生成[0,1)之间指定数目的随机数组成的一维数组rand()生成服从均匀分布的样本值randn()生成服从正态分布的样本值randint()生成指定上下限范围的随机数seed()确定随机数生成器的种子permutation()对一个序列进行随机排序,不改变原数组shuffle对一个序列进行随机排序,改变原数组binomial()产生二项分布的随机数normal()产生正态(高斯)分布的随机数beta()产生beta分布的随机数uniform()产生均匀分布的数组11.1多维数组对象ndarray6.数组索引和切片1)一维数组的索引和切片
一维数组的索引类似于Python中的列表,可以使用和列表相同的方式对数组的元素进行存取。和列表不同的是,通过切片获取的新的数组是原始数组的一个视图,它与原始数组共享同一块数椐存储空间,这就意味着在视图上的操作都会使得原始数组发生改变。如果需要的并非视图而是要复制数据,则可以通过copy()方法来实现,这时新旧两个数组不共享同一块数据存储空间。11.1多维数组对象ndarrayIn[37]arr4[0:2]=10,11arr4Out[37]array([10,11,3,4,5,6,7,8,9])In[38]arr5=arr4[2:4]arr5Out[38]array([3,4])In[39]arr5[:]=0arr5Out[39]array([0,0])In[40]arr4Out[40]array([10,11,0,0,5,6,7,8,9]11.1多维数组对象ndarray11.1多维数组对象ndarray2)二维数组的索引与切片对于二维数组,可以在单个或者2个轴向上完成切片,也可以和整数索引一起混合使用。当使用整数列表对数组元素进行存取时,将使用列表中的每个元素作为下标,这种索引称为“花式索引”。注意:使用列表作为下标得到的数组不和原始数组共享数据。
11.1多维数组对象ndarrayIn[48]arr=np.arange(32).reshape((8,4))arrOut[48]array([[0,1,2,3],[4,5,6,7],
[8,9,10,11],[12,13,14,15],[16,17,18,19],[20,21,22,23],[24,25,26,27],[28,29,30,31]])In[49]arr[[1,5,7,2],[0,3,1,2]]Out[49]array([4,23,29,10])In[50]arr[[1,5,7,2]][:,[0,3,1,2]]Out[50]array([[4,7,5,6],[20,23,21,22],[28,31,29,30],[8,11,9,10]])11.2数组运算1.
创建numpy矩阵创建矩阵有两种方法:使用mat()函数使用matrix()函数In[57]matr2=np.matrix([[1,2,3],[4,5,6],[7,8,9]])matr2Out[57]matrix([[1.,2.,3.],[4.,5.,6.],[7.,8.,9.]])matr1=np.mat("1,2,3;4,5,6;7,8,9",dtype=np.float64)11.2数组运算2.矩阵运算
矩阵运算是针对整个矩阵中的每个元素进行的,和使用循环相比,在运算速度上更快。矩阵和矩阵之间可以进行+、-、*、/,其中*为点乘,需要特别注意。如果要对应元素相乘可以使用multipy()函数。
除了能够实现算术运算外,矩阵还有特有的一些属性。属性含义T返回矩阵的转置H返回矩阵的共轭转置I返回逆矩阵A返回矩阵的视图11.2数组运算3.通用函数通用函数(ufunc)是一种对数组中每个元素进行操作的函数,用法也很简单。通用函数支持全部的四则运算(+、-、*、/、**),并且保留习惯的运算符,但是需要注意,操作的对象是数组。数组间的四则运算表示对每个数组中的元素分别进行四则运算,所以进行四则运算的两个数组的形状必须一致。通用函数也支持比较运算(>、>=、<、<=、==、!=、all、any),返回结果是一个布尔数组,其每个元素对应元素的比较结果。11.2数组运算In[67]a=np.arange(1,10,1).reshape(3,3)b=np.arange(10,19,1).reshape(3,3)b-aOut[67]array([[9,9,9],[9,9,9],[9,9,9]])In[68]b/
aOut[68]array([[10.,5.5,4.],[3.25,2.8,2.5],[2.28571429,2.125,2.]])In[69]a[0]=20a>=bOut[69]array([[True,True,True],[False,False,False],[False,False,False]],dtype=bool)In[70](a>=b).all()#与运算Out[70]False11.2数组运算4.统计运算Numpy库支持对整个数组或者按照指定轴向的数据进行统计计算,当axis参数为0时,表示沿着纵轴计算,当axis为1时,表示沿着横轴进行计算。In[71]arr=np.random.randint(1,10,(3,3))arrOut[71]array([[4,9,3],[1,9,7],[1,6,1]])In[72]arr.sort()arrOut[72]array([[3,4,9],[1,7,9],[1,1,6]])11.2数组运算方法含义方法含义sum求和unique找出数组中的唯一值并返回已排序的结果mean算术平均值tile把一个数组重复若干次std、var标准差和方差repeat按照轴向重复一个数组若干次min、max最小值和最大值cumprod所有元素的累计积argmin、argmax最小值和最大值的索引sort排序cumsun所有元素的累计和
基本数组统计方法11.3数组的存取11.3数组的存取Numpy提供一组函数可以进行数组存储和读取,具体如下:save(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西服装学院《检测技术》2024-2025学年第二学期期末试卷
- 商丘职业技术学院《建筑结构BM》2024-2025学年第二学期期末试卷
- 江苏医药职业学院《中学英语教材教法》2024-2025学年第二学期期末试卷
- 四川电影电视学院《医学信息分析》2024-2025学年第二学期期末试卷
- 吉林建筑大学《人文经典选读》2024-2025学年第二学期期末试卷
- 汕头职业技术学院《音视频制作A》2024-2025学年第二学期期末试卷
- 湖南税务高等专科学校《证券投资技术分析》2024-2025学年第二学期期末试卷
- 2026广西南宁市天桃实验学校教育集团天桃校区外聘教师招聘1人笔试备考试题及答案解析
- 2026四川宜宾屏山县岷江幼儿园招聘幼儿教师、保育员笔试模拟试题及答案解析
- 2026福建泉州安溪县第七幼儿园教师招聘笔试模拟试题及答案解析
- (2026春新版)苏教版二年级数学下册全册教学设计1
- 资产租赁信用考核制度
- 2026年江苏农林职业技术学院单招职业技能考试题库附答案解析
- 2026年上饶职业技术学院单招职业适应性测试题库及答案详解(历年真题)
- 2026石嘴山市能达建设发展有限公司招聘3人考试参考题库及答案解析
- 高一下学期返校收心归位主题班会课件
- 北京市朝阳区2025-2026学年高三上学期期末质量检测语文试卷及参考答案
- 2026年春季人教版小学数学三年级下册教学计划(含进度表)
- 挂篮使用说明书
- 2025年法医精神病试题及答案
- 初中开学安全教育教学课件
评论
0/150
提交评论