您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > Python-NumPy
Python数据分析-NumPyNumpy简介·NumPy是什么?·NumPy的安装NumPy是什么?NumPy是Python的一种开源的数值计算扩展库。它包含很多功能:·创建n维数组(矩阵)·对数组进行函数运算·数值积分·线性代数运算·傅里叶变换·随机数产生······NumPy是什么?NumPy是在1995年诞生的Python库Numeric的基础上建立起来的。但真正促使NumPy的发行的是Python的SciPy库。SciPy是2001年发行的一个类似于Matlab,Maple,Mathematica等数学计算软件的Python库,它实现里面的大多数功能。但SciPy中并没有合适的类似于Numeric中的对于基础的数据对象处理的功能。于是,SciPy的开发者将SciPy中的一部分和Numeric的设计思想结合,在2005年发行了NumPy。NumPy是什么?标准的Python中用list(列表)保存值,可以当做数组使用,但因为列表中的元素可以是任何对象,所以浪费了CPU运算时间和内存。NumPy诞生为了弥补这些缺陷。它提供了两种基本的对象:ndarray:全称(n-dimensionalarrayobject)是储存单一数据类型的多维数组。ufunc:全称(universalfunctionobject)它是一种能够对数组进行处理的函数。NumPy的官方文档:的安装Anaconda里面已经安装过NumPy。原生的Python安装:·在cmd中输入pipinstallnumpy·在官网中下载相关版本安装安装之后,我们用导入这个库importnumpyasnpnp.__version__'1.11.3'并且查看版本:ndarray对象·ndarray的创建·ndarray的属性·ndarray的切片·多维数组·结构数组ndarray的创建NumPy中的核心对象是ndarray。ndarray可以看成数组,类似于R语言的向量或者矩阵。NumPy里面所有的函数都是围绕ndarray展开的。a=np.array([1,2,3,4])b=np.array((5,6,7,8))c=np.array([[1,2,3,4],[5,6,7,8]])bc------------------------------[5,6,7,8][[1,2,3,4],[4,5,6,7],[7,8,9,10]]ndarray对维数没有限制。[]从内到外分别为第0轴,第1轴,第2轴。c第0轴长度为3,第1轴长度为4。ndarray的创建NumPy提供了专门用于生成ndarray的函数,提高创建ndarray的速度。a=np.arange(0,1,0.1)array([0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9])b=np.linspace(0,1,10)array([0.,0.11111111,0.22222222,0.33333333,0.44444444,0.55555556,0.66666667,0.77777778,0.88888889,1.])c=np.linspace(0,1,10,endpoint=False)array([0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9])d=np.logspace(0,2,5)array([1.,3.16227766,10.,31.6227766,100.])ndarray的创建np.empty((2,3),np.int)创建2*3的整形型空矩阵,只分配内存np.zeros(4,np.int)创建长度为4,值为全部为0的矩阵np.full(4,np.pi)创建长度为4,值为全部为pi的矩阵deffunc(i):returni%4+1np.fromfunction(func,(10,))array([1.,2.,3.,4.,1.,2.,3.,4.,1.,2.])还可以自定义函数产生ndarray。fromfunction第一个参数接收计算函数,第二个参数接收数组的形状。ndarray的属性ndarray的元素具有相同的元素类型。常用的有int(整型),float(浮点型),complex(复数型)。a=np.array([1,2,3,4],dtype=float)array([1.,2.,3.,4.])a.dtypedtype('float64')ndarray的shape属性用来获得它的形状,也可以自己指定。c=np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])c.shape(3,4)a=np.array([1,2,3,4])d=a.reshape((2,2))array([[1,2],[3,4]])ndarray的切片ndarray的切片和list是一样的。a=np.arange(10)aarray([0,1,2,3,4,5,6,7,8,9])a[5]a[3:5]a[:5]a[:-1]----------------------------------------------------5[3,4][0,1,2,3,4][0,1,2,3,4,5,6,7,8]a[1:-1:2]a[::-1]a[5:1:-2]---------------------------------------------------[1,3,5,7][9,8,7,6,5,4,3,2,1,0][5,3]可以通过切片的对ndarray中的元素进行更改。a[2:4]=100,101aarray([0,1,100,101,4,5,6,7,8,9])ndarray的切片ndarray通过切片产生一个新的数组b,b和a共享同一块数据存储空间。。b=a[3:7]b[2]=-10ba----------------------------------------------------------------------[101,4,-10,6][0,1,100,101,4,-10,6,7,8,9]如果想改变这种情况,我们可以用列表对数组元素切片。b=a[[3,3,-3,8]]barray([3,3,7,8])b[2]=100ba----------------------------------------------------------------------[3,3,100,8][0,1,2,3,4,5,6,7,8,9]多维数组NumPy的多维数组和一维数组类似。多维数组有多个轴。我们前面已经提到从内到外分别是第0轴,第1轴…a=np.arange(0,60,10).reshape(-1,1)+np.arange(0,6)array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])a[0,3:5]a[4:,4:]a[2::2,::2]---------------------------------[3,4][[44,45],[[20,22,24],[54,55]][40,42,44]]#上面方法对于数组的切片都是共享原数组的储存空间的。多维数组如果我们想创立原数组的副本,我们可以用整数元组,列表,整数数组,布尔数组进行切片。结构数组C语言中可以通过struct关键字定义结构类型。NumPy中也有类似的结构数组。persontype=np.dtype({'names':['name','age','weight'],'formats':['S30','i','f']})a=np.array([(Zhang,32,75.5),(Wang,24,65.2)],dtype=persontype)我们就创建了一个结构数组,并且可以通过索引得到每一行。nameageweight0zhang3275.51wang2465.2printa[0]('Zhang',32,75.5)ufunc函数·ufunc简介·四则运算·比较运算和布尔运算·自定义ufunc函数·广播(broadcasting)ufunc简介ufunc是universalfunction的简称,它是一种能对数组每个元素进行运算的函数。NumPy的许多ufunc函数都是用C语言实现的,因此它们的运算速度非常快。x=np.linspace(0,2*np.pi,10)y=np.sin(x)yarray([0.00000000e+00,6.42787610e-01,9.84807753e-01,.....,-2.44929360e-16])值得注意的是,对于同等长度的ndarray,np.sin()比math.sin()快但是对于单个数值,math.sin()的速度则更快。四则运算NumPy提供了许多ufunc函数,它们和相应的运算符运算结果相同。。a=np.arange(0,4)b=np.arange(1,5)np.add(a,b)array([1,3,5,7])a+barray([1,3,5,7])np.subtract(a,b)#减法np.multiply(a,b)#乘法np.divide(a,b)#如果两个数字都为整数,则为整数除法np.power(a,b)#乘方比较运算和布尔运算使用==,对两个数组进行比较,会返回一个布尔数组,每一个元素都是对应元素的比较结果。np.array([1,2,3])np.array([3,2,1])array([True,False,False],dtype=bool)布尔运算在NumPy中也有对应的ufunc函数。表达式ufunc函数y=x1==x2equal(x1,x2[,y])y=x1!=x2not_equal(x1,x2[,y])y=x1x2less(x1,x2[,y])y=x1=x2not_equak(x1,x2[,y])y=x1x2greater(x1,x2[,y])y=x1=x2gerater_equal(x1,x2[,y])自定义ufunc函数NumPy提供的标准ufunc函数可以组合出复合的表达式,但是有些情况下,自己编写的则更为方便。我们可以把自己编写的函数用frompyfunc()转化成ufunc函数。defnum_judge(x,a):#对于一个数字如果是3或5的倍数就ifx%3==0:返回0,否则返回a。r=0elifx%5==0:r=0else:r=areturnrx=np.linspace(0,10,11)y=np.array([num_judge(t,2)fortinx])#列表生成式array([0,2,2,0,2,0,0,2,2,0,0])自定义ufunc函数使用frompyfunc()进行转化,调用格式如下:numb_judge=np.frompyfunc(num_judge,2,1)y=numb_judge(x,2)array([0,2,2,0,2,0,0,2,2,0,0],dtype=object)frompyfunc(func,nin,nout)func:计算函数nin:func()输入参数的个数nout:func()输出参数的个数因为最后输出的元素类型是object,所以我们还需要把它转换成整型。y.astype(np.int)广播(broadcasting)使用ufunc对两个数组进行运算时,ufunc函数会对两个数组的对应元素进行运算。如果数组的形状不相同,就会进行下广播处理。简而言之,就是向两个数组每一维度上的最大值靠齐。广播(broadcasting
本文标题:Python-NumPy
链接地址:https://www.777doc.com/doc-1797030 .html