Python数据分析与可视化教案2.8 Python的NumPy库.docx
课 题2.8 Python 的 NumPy 库课 型讲练授课班级大数据授课时数4教学目标1 .能够创立一维和二维数组。2,能够对数组进行属性查询。3 .能够对数组进行切片操作。教学重点1,能够创立一维和二维数组。2.能够对数组进行属性查询。教学难点1.能够对数组进行切片操作。在构建DataFrame的数据集时,有一种方法就是借助于二维数组创立,学情分析学情分析因此,掌握二维数组对于后续内容的学习很重要。NumPy是Python的开源的科学计算机工具包,是一个高级数值编程工具,通过 NumPy可以不用遍历循环就实现大型的矩阵的计算。NumPy可以实现生成随机数、 线性代数、傅里叶变换等功能。同时,NumPy可以保存任意类型的数据,这使得Numpy 可以快速而高效地处理各种数据。NumPy提供了许多高级的数值编程工具,如矩阵 数据类型、矢量处理,以及精密的运算库,NumPy专为进行严格的数字处理而产生。在导入NumPy的时候,一般需要先使用一行代码,代码如下:import numpy as np一、创立数组对象1.创立一维数组当数组中每个元素都只带有一个下标时,这样的数组就是一维数组,一维数组是 由数字组成的顺序排序单一数组。一维数组是计算机程序中最基本的数组,二维及多 维数组可以看作是一维数组的屡次叠加产生的。Python提供array函数可以创立一维数组,通过array函数创立一维数组类似于 创立列表list,但是array函数没有各种运算函数,因此不太适合进行各种复杂计算。 利用array函数创立一维数组的一般格式为:np.array(valuel, value2/*)例如代码如下:import numpy as nparrl = np.array(l,2,3)print("创立的一维数组为arrl为:n",arrl)输出结果如图2-*所示。Run:2-8AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/2-8.py创立的一维数组为arE为:1 2 3UrpProcess finished with exit code 0图2-*创立一维数组例如结果2 .创立二维数组二维数组与一维数组相似,但是用法上耍比一维数组复杂一点。仅从表现形式上 看,m行n列二维数组就是一个m*n矩阵。利用array函数也可以创立二维数组,利 用aiTay函数创立二维数组的一般格式为:np.array(valuell, value 12, J,Ivalue21, value22,/)其中,在创立二维数组时,需要加2层括号,这一点与创立一维数组不同。例如代码如下:arr2 = np.array(l,2,3,2,3,4)print("创立的2*3的二维数组为:n”,arr2)arr3 = np.array(l,2,3,2,3,4,3,4,5)print("创立的3*3的二维数组为:n”,arr3)输出结果如图2-*所示。Run:2-8AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/2-8.py创立的2*3的二维数组为arr2为:士1123 »2 3 4共创立的3*3的二维数组为arr3为:»1 2 32 3 434 5Process finished with exit code 0图2-*创立二维数组例如结果3利用arange和linspace等方法生成数组利用array函数创立数组,其方法都是先创立一个序列,然后再转换成数组,这 样的创立数组的效率显然不高,因此NumPy提供专门的函数用来创立数组,如arange 函数和linspace函数。(1)利用arange函数生成数组arange函数类似于Python的自带函数range, arange函数的一般格式为:np.arange (start,stop,step)其中,start表示初始值,stop表示终止值,并且终止值不能取到的,st叩表示步 长。(2)利用linspace函数生成数组linspace函数可以不通过间隔而是元素个数的方式成数组,linspace函数一般格式 为:np.linspace (start,stop,n)其中,start表示初始值,stop表示终止值,并且终止值是可以取到的,这一点与 arange函数不同,n表示生成数组的元素个数。例如代码如下:print(n0到1之间以0.2为间隔的数组为:*np.arange(0,l,0.2)print。到1之间以0.2为间隔的数组为二npinspace(0,0.8,5)输出结果如图2-*所示。Run:2-8AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/2-8.py。到1之间以0.2为间隔的数组为:0.0.2 0.4 0.6 0.8。到1之间以0.2为间隔的数组为:0. 0.2 0.4 0.6 0.85s =5Process finished with exit code 0图2-*利用arange和linspace等方法生成数组例如结果二、查看数组属性为了能够更好地理解数组,了解数组的基本属性是十分有必要的,数组的基本属 性如表2-*所示。表2-*数组属性及其作用表例如代码如下:属性作用ndim表示数组的维度。shape表示数组形状,结果为(m,n)表示m行n列,shape0表示行数,shapelW示列数。size表示数组的元素总数。dtype表示数组中兀素的类型。print(narrl的维度为:dnarr2的维度为:小皿仃3的维度为:矛%(arr 1 .ndim,arr2.ndim,arr3.ndim)print("arr2:n",arr2)print(Harr2 的形状为:arr2.shape)print(narr2 的行数为:",air2.shape0)print(narr2 的列数为:”,an2shapel)print(narr2 的元素总数为:",arr2.size)print(narr2 的元素类型为:",arr2.dtype)输出结果如图2-*所示。Run:2-8AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/2-8.pyarrl的维度为:1arr2的维度为:2-> $ arr3的维度为:2arr2:-12 32 3 4 arr2的形状为:(2, 3)arr2的行数为:2arr2的列数为:3arr2的元素总数为:6arr2的元素类型为:int32Process finished with exit code 0图2-*查看数组属性例如结果三、数组的索引与切片1 .一维数组的索引与切片一维数组的索引与切片与列表类似,一维数组的索引和切片一般格式为:arrayindexarray start:last:step其中,index表示索引位置,并且是从。开始的。start表示起始索引,start可以 省略,默认是0。last表示终止索引,并且这个终止索引是不能取到的。step表示索 引步长,即索引之间的间隔。例如代码如下:arr4 = np.arange( 11,20)print("数组为:arr4)print("索引号1对应的元素为:",arr4l)print("索引号1到索引号4对应的切片为二arr4l:5)输出结果如图2-*所示。Run:2-8AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/2-8.py数组为:11 12 13 14 15 16 17 18 19 索引号1对应的元素为:12> 名 索弓I号1到索引号4对应的切片为:12 13 14 15 2”. Process finished with exit code 0W图2-* 一维数组的索引与切片例如结果.二维数组的索引与切片二维数组两个维度(行与列)都有索引,在访问的时候,要用逗号隔开,并且是 先访问行索引再访问列索引。二维数组的索引和切片一般格式为:array row_index,column_indexarrayrow_start:row_last, column_start:column_last其中,row_index表示行索引位置,columnjndex表示列索引位置,并且都是从0 开始。row_start和column_start表示行与列的起始索引,默认是0。row_last和 columnast表示行与列的终止索引,并且这个终止索引对应的值是不能取到的。例如代码如下:arr5 = np.array(l ,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)print("数组为:n”,arr5)print(”行索引为1,列索引为2对应的元素为:n”,arr5l,2)print(”行索引为1到2,列索引为2到3对应的元素为:n”,arr5l:3,2:4)print(”行索引为2的整列数据为二arr52,:)print(咧索引为3的整列数据为:",arr5:,3)输出结果如图2-*所示。Run:2-8>C:UsersliIiangAnaconda3python.exe C:UsersliliangPycharmProjectspython2-8.py数组为: 1 2 3 4二方 5 6 7 8 二 9 10 11 12 » .13 14 15 16行索引为1,列索引为2对应的元紊为:i 7行索引为1到2,列索引为2到3对应的元素为:7 8 11 12行索引为2的整列数据为:9 10 11 12列索引为3的整列数据为:4 8 12 16Process finished with exit code 0图2-*二维数组的索引与切片例如结果四、NumPy随机数NumPy有强大的生成随机数的功能,而与随机数相关的函数都在random模块中, 其中包含了可以生成多种概率分布的随机数函数,但是需要注意的是,使用numpy 库中的random模块和直接使用python中random模块在一些函数上有不同的使用方 法。比方生成随机整数randint,在numpy库中是使用random.randint是不能取到终止 整数的,而在python的random模块中,使用randint是可以取到终止整数的。1.生成随机小数(1)生成一维随机小数生成1个0到1之间随机小数的一般格式为:np.random.rand()生成x个。至U 1之间随机小数组成的一维数组的一般格式为:np.random.rand(x)生成1个。到y (y为整型)之间随机小数的一般方法为:np.random.randOy生成x个0到y (y为整型)之间随机小数组成的一维数组的一般方法为: np.random.rand(x)*y例如代码如下:print。生成1个0到1之间的小数”,。)print("生成 5 个 0 到 1 之间的小数”,np.random.rand(5)print("生成 1 个 0 至2 之间的小数”,np.random.rand()*2)print("生成 5 个 0 至U 2 之间的小数”,np.random.rand(5)*2)输出结果如图2.*所示。Run:2-8AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/2-8.py生成1个0到1之间的小数0.33359570130654226生成5个。到 1 之间的小数0.55651845 0.28576281 0.91099991 0.33486916 0.11101831 rp 生成1个0到2之间的小数4 生成5个。到2之间的小数1.70919045 1.26134277 0.98300627 1.65530256 0.80848382X 二Process finished with exit code 0图2-*生成一维随机小数例如结果(2)生成二维随机小数生成m行n列的0到1之间随机小数二维数组的一般方法为:np.random.rand(m,m)例如代码如下:print("生成 2*2 的 0 到 1 的随机小数二维数组:n”,np.random.rand(2,2)print("生成 2*3 的 0 到 2 的随机小数二维数组:n”,np.random.rand(2,3)*2)输出结果如图2-*所示。 Run:2-8AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/2-8.py生成2*2的。到1.的随机小数二维数组:0.44104325 0.8217508 0.50999213 0.45840465R 生成2*3的。到2的随机小数二维数组:, 存 1.13204545 0.09509508 0.08085505 1.84992171 0.43329497 1.29572153Process finished with exit code 0图2-*生成二维随机小数不例结果.生成随机整数生成随机整数可以使用randint函数,randint函数的一般方法为:np.random.randint(start,stop,size=m,n)其中,start表示起始整数,stop表示终止整数,起始整数能取到而终止整数不能 取到。size= m,n表示生成m行n列二维数组,size默认为None,即默认生成一个随机整数。例如代码如下:print("生成 1 个 0 到 10 的随机整数:n”,np.random.randint( 11)print("生成 1 个 5 到 15 的随机整数:nnp.random.randint(5,l6)print(n生成 3*3 的 1 到 100 随机整数二维数组:n",np.random.randint(l,101,size=3,3)输出结果如图2-*所示。Run:2-8AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/2-8.py生成1个0到1。的随机整数:7« 方生成1个5到15的随机整数:2 11»_ 生成3*3的1到100的随机整数二维数蛆:49 29 7548 7 614 79 92Process finished with exit code 0图2-*生成随机整数例如结果3 ,生成正态分布随机数正态分布是数据分布中一种常用的分布,NumPy提供了 randn函数用来生成正态 分布的随机数。生成x个正态分布随机数组成的一维数组的一般方法为:np.random.randn(x)生成m行n列的正态分布随机数二维数组的一般方法为:np.random.randn(m,n)例如代码如下:print("生成10个正态分布的随机数:n”,np.random.randn(10)print("生成3*3的正态分布随机数的二维数组:n”,np.random.randn(3,3)输出结果如图2-*所示。Run:2-8>C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/2-8.py生成1。个正态分布的随机数:-1.38082781 -0.23040801 -0.24409116 0.07119311 0.68619652 0.89391238二 万 2,29635133 -2.04009219 -1.37541982 -0.60174799 丑生成3*3的正态分布随机数的二维数组:,一 1.19116624 1.76131985 0.46618962 -0.43352108 1.47914566 -0.48643985 1.5802139 -0.38085871 -0.65620729Process finished with exit code 0图2-*生成随机整数例如结果五、NumPy的操作1 .数组转置数组转置操作是指将行与列对调,即第1行变成第1歹!J,第2行变成第2行,以 此类推。在NumPy中,数组转置可以使用T方法来实现。例如代码如下:arr6 = np.array(l,2,3,4,5,6)print(narr6 =nn,arr6)print(narr6转置后的结果为:narr6.T)输出结果如图2-*所示。Run:2-8AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/2-8.pyarr6 =二:1 2 3二 方4 5 6丑 arr6转置后的结果为:»-1 4T ”3 6Process finished with exit code 0图2-*数组转置例如结果.数组变形在对数组进行操作时,经常需要对数据的形状进行改变,在NumPy中,可以使 用reshape函数改变数组的形状。reshape函数一般方法为:array.reshape(m,n)其中,array表示需要改变的原数组,m和n分别表示转换后的新数组的行数和 列数。例如代码如下:arr7 = np.arange(lO)print("原数组为:n”,arr7)arr7.reshape(2,5)print("改为 2 行 5 列后的数组为:n”,arr7.reshape(2,5)输出结果如图2-*所示。Run:2-8AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/2-8.py原数组为:0123456789 rp 改为2行5列后的数组为:20123 4» 5678 9WProcess finished with exit code 0图2-*数组变形例如结果任务实训任务1:用两种方法创立由1到9九个数字组成的3*3的二维数组。具体代码如下:_arr8 = np.array(l,2,3,4,5,6,7,8,9)print("直接创立二维数组:n”,arr8)arr9 = np.arange( 1,10).reshape(3,3)print("通过 reshape 创立二维数组:n”,arr9)输出结果如图2-*所示。Run:2-8AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/2-8.py直接创立二维数组:1 2 34 5 6=17 8 9»_ 通过reshape创立二维数组:1 2 34 5 67 8 9Process finished with exit code 0图2-*任务1输出结果任务2:创立由1到9九个数字组成的3*3的二维数组,并计算每一行的平均数。(可以用mean函数求平均值)arrlO = np.arange( 1,10).reshape(3,3)print("创立二维数组:n”,arrlO)columns_count = arrlO.shape 1 for i in range(columns_count):print("第d行所有元素的平均值为:.2F%(i+l,arrlOi,:.mean()输出结果如图2-*所示。Run:2-8>C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/2-8.py创立二维数组:_1 2 3 rp4 5 6过7 8 9X 7 第1行所有元素的平均值为:2.00;第2行所有元紊的平均值为:5.0。 第3行所有元紊的平均值为:8.00Process finished with exit code 0图2-*任务2输出结果巩固训练创立由1到16十六个数字组成的4*4的二维数组,并计算每一列的平均数。(可 以用mean函数求平均值)