)
NumPy库入门 北理工嵩天老师python数据分析与展示随堂笔记列表和数组的区别列表列表中每一个元素的数据类型是可以不同的数组要求每一个元素的数据类型是相同的多维数据二维数据由多个一维数据构成是一维数据组合形式高维数据高维数据仅利用最基本的二元关系展示数据间的复杂结构数据维度的python表示一维数据列表和集合类型[3.1398,3.1349,3.1376] 有序{3.1398,3.1349,3.1376} 无序二维数据:列表类型[[3.1398,3.1349,3.1376],[3.1413,3.1404,3.1401]]多维数据列表类型Numpy库Numpy是一个开源的python科学计算基础库1.一个强大的N维数组对象ndarry2.广播功能函数3.整合C/C/Fortran代码的工具4.线性代数、傅里叶变换、随机数生成等功能NumPy是SciPy、Pandas等数据处理或科学计算库的基础N维数组对象ndarry例计算A2B3其中A和B是一维数组defpySum():a[0,1,2,3,4]b[9,8,7,6,5]c[]foriinrange(len(a)):c.append(a[i]**2b[i]**3)returncprint(pySum())[729, 513, 347, 225, 141]上述方法我们还是将我们的工作点放在一个一个元素的运算上这并不是一种科学计算的思想和方式。Numpy使用了另外一种思路。如下importnumpyasnp#引入numpy模块defnpSum():anp.array([0,1,2,3,4])#生成一个数组bnp.array([9,8,7,6,5])ca**2b**3# ** 数组中每个元素的次方returncprint(npSum())[729 513 347 225 141]N维数组对象ndarry1.数组对象可以去掉元素间运算所需的循环使一维向量更像单个数据。2.通过设置专门的数组对象经过优化可以提升这类应用的运算速度。NumPy的底层实现是由C来完成的在进行数组运算的时候底层的C会提供非常高效和快速的运算性能。观察科学计算中一个维度所有数据的类型往往相同。数组对象采用相同的数据类型有助于节省运算和存储空间ndarray是一个多维数组对象有两部分组成1.实际的数据 2.描述这些数据的元数据数据维度、数据类型等ndarray数组一般要求所有元素类型相同同质数组下标从0开始。ndarray数组可以由非同质对象构成。其元素为对象类型。非同质ndarray无法有效发挥NumPy优势尽量避免使用。用np.array()生成一个ndarray数组ndarray在程序中的别名是arrayanp.array([[0,1,2,3,4],[9,8,7,6,5]])aarray([[0, 1, 2, 3, 4], [9, 8, 7, 6, 5]])print(a)#打印时元素由空格分割[[0 1 2 3 4] [9 8 7 6 5]]ndarray有两个基本的概念轴axis:保存数据的维度 秩rank:轴的数量即有几个维度ndarray对象的属性属性 说明 .ndim 秩即轴的数量或维度的数量 .shape ndarray对象的尺度对于矩阵n行m列 .size ndarray对象元素的个数相当于.shape中的n*m的值 .dtype ndarray对象的元素类型 .itemsize ndarray对象中每个元素的大小以字节为单位ndarray的元素类型支持的数据类型可自行百度1.科学计算涉及数据较多对存储和性能都有较高要求。 2.对元素类型精细定义有助于NumPy合理使用存储空间并优化性能。 3.对元素类型精细定义有助于程序员对程序规模有合理评估。对比Python语法仅支持整数、浮点数和负数3种类型ndarray数组的创建和变换ndarray数组的创建方法1.从Python中的列表、元组等类型中创建ndarray数组 x np.array(list/tuple) x np.array(list/tuple,dtypenp.float32) #指定元素的数据类型 当np.array()不指定dtype时NumPy根据数据情况关联一个dtype类型 2.使用NumPy中函数创建ndarray数组如arange,ones,zero等np.zeros() 函数 说明 np.arange(n) 类似range()函数返回ndarray类型元素从0到n-1 np.ones(shape 根据shape生成一个全1数组shape是元组类型 np.zeros(shape) 根据shape生成一个全0数组shape是元组类型 np.full(shape,val) 根据shape生成一个数组每个元素值都是val np.eye(n) 创建一个正方的n*n单位矩阵对角线为1其余为0 np.ones_like(a) 根据数组a的形状生成一个全1的数组 np.zeros_like(a) 根据数组a的形状生成一个全0的数组 np.full_like(a,val) 根据数组a的形状状生成一个数组,每个元素值都是val np.linspace(start,end,num) 根据起止数据及元素个数等间距地填充数据形成数组如果将参数 endpoint置为False,end将不作为最后一个元素出现 np.concatenate(a) 将两个或多个数组合并成一个新数组,a为一个元组 3.从字节流raw bytes中创建ndarray数组。 4.从文件中读取特定格式创建ndarray数组。ndarray数组的维度变换方法 说明 .reshape(shape) 不改变数组元素返回一个shapeshape是一个元组形状的数 组原数组不变 .resize(shape) 与.reshape()功能一致但修改原数组 .swapaxes(ax1,ax2) 将数组n个维度中的两个维度进行调换 .flatten 对数组进行降维返回折叠后的一维数组原数组不变ndarray数组向列表的转换利用 .tolist() 方法即可实现转换 例如anp.full((2,3,4),25)aarray([[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]], [[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]])ba.tolist()b[[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]], [[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]]aarray([[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]], [[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]])ndarray 数组的操作数组的索引和切片索引获取数组中特定位置元素的过程切片获取数组元素子集的过程一维数组的索引和切片与python的列表类似anp.array([9,8,7,6,5])a[2]7a[1:4:2]#切片 [起止编号终止编号不含步长]array([8, 6])多维数组的索引和切片索引anp.arange(24).reshape((2,3,4))aarray([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]])a[1,2,3]23a[0,1,2]6a[-1,-2,-3]# -1表示数组中最后一个元素值-2表示倒数第二个元素值17切片a[:,1,-3]# 选取整个维度此处表示第一维度的每个元素都要进行切片array([ 5, 17])a[:,1:3,:]# 每个维度切片方法与一维数组相同array([[[ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[16, 17, 18, 19], [20, 21, 22, 23]]])a[:,:,::2]# 每个维度可以使用步长跳跃切片array([[[ 0, 2], [ 4, 6], [ 8, 10]], [[12, 14], [16, 18], [20, 22]]])ndarray数组的运算1.数组与标量之间的运算作用于数组的每一个元素NumPy一元函数对ndarray中的数据执行元素级运算的函数函数 说明np.abs(x) np.fabs(x) 计算数组各元素整数、浮点数的绝对值np.sqrt(x) 计算数组各元素的平方根np.square(x) 计算数组各元素的平方np.log(x) np.log10(x) np.log2(x) 计算各数组各元素的自然对数、10底对数等np.ceil(x) np.floor(x) 计算数组各元素的ceiling值向上取整或floor值向下取整np.rint(x) 计算数组各元素的四舍五入值np.modf(x) 将数组各元素的小数和整数部分以两个独立数组形式返回np.cos(x) np.cosh(x) np.sin(x) np.sinh(x) 计算数组各元素的普通型和双曲型三角函数 np.tan(x) np.tanh(x) np.exp(x) 计算数组各元素的指数值 np.sign(x) 计算数组各元素的符号值1(),0,-1(-)Numpy二元函数函数 说明 - * / ** 两个数组各元素进行对应运算 np.maximum(x,y) np.fmax() np.minimum(x,y) np.fmin() 返回一个元素为两个数组对应位置中较大/较小的元素组成的数组 np.mod(x,y) 元素级的模运算 np.copysign(x,y) 将数组y中各元素值的符号赋值给数组x对应元素 ! 算术比较产生布尔型数组