Python科学计算与数据处理—函数库_第1页
Python科学计算与数据处理—函数库_第2页
Python科学计算与数据处理—函数库_第3页
Python科学计算与数据处理—函数库_第4页
Python科学计算与数据处理—函数库_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、Python科学计算与数据处理函数库NumPy函数库目录sum、average、variancechang嗷组形状和数组堆栈最大值和排序多项式函数分段函数统计函数解线性方程函数库除了前面描述的ndarray数组对象和ufunc函数之外,NumPy还提供了大量用于数组处理的函数。充分利用这些功能可以简化程序的逻辑,提高运算速度。总和、平均值、方差总和()计算数组元素的总和。您还可以对类似于数组的序列求和,如list、tuple。当数组是多维数组时,它会计算数组中所有元素的和:a=nprandomrandint(,size=(,)数组(,)npsum(a)sum、average、variance如

2、果指定了轴参数,则求和操作将沿指定的轴执行。在上面的例子中,阵列A的第一轴长度是,第一轴长度是。如果轴参数为,则每行数字相加的结果是一维长度数组。如果参数轴为,则每列中的数字之和将导致一维长度数组。也就是说,结果数组的形状是原始数组的形状,不包括它的第个轴元素:npsum(a,axis=)数组(,)npsum(a,axis=)数组(,)sum、average、variance。上面的例子将产生一个新的数组来保存求和结果。如果要将结果直接保存到另一个数组,可以使用out参数指定输出数组必须与结果数组具有相同的形状,就像ufunc函数一样。Sum、average、方差Sum()默认使用与数组元素类

3、型相同的累积变量计算。如果元素类型是整数,则系统的默认整数类型用作累积变量。位系统中累积变量的类型是位整数。因此,累积整数数组时可能会发生溢出,即数组元素的总和超过累积变量的值范围。但是,当计算单精度浮点数类型的大数组时,精度可能不够。此时,累积变量的类型可以由dtype参数指定。在下面的示例中,我们将单精度数组与所有元素相加,并比较单精度累积变量和双精度累积变量的计算结果:sum、average、varianceb=npones,(dttype=npfloat)*#要创建单精度浮点数的大数组,b#不能使用浮点数来显示数组(一Dtype=float)npsum(b)#使用单精度累积变量的累积计

4、算误差将变得越来越大npsum(b,dttype=npdouble)#®用对于数组的平均值,可以获得正确的值和、平均值、方差均值(),或者可以通过轴参数指定平均值的轴,并且可以通过out参数指定输出数组。与sum()不同,它对整数数组使用双精度浮点数,对其他类型的数组使用与数组元素相同类型的累积变量:npmean(a,axis=)#整数数组使用双精度浮点数来计算数组(,),npmean(b)婵精度浮点数使用单精度浮点数来计算npmean(b),Dtype=NPdouble)#averagesum、average、用双精度浮点数计算的方差。此外,average(泌可以计算数组的平均值。

5、它没有out和dtype参数,但有一个指定每个元素权重的权重参数。您可以在IPython中输入npaverage来检查说明。Std()和var()分别计算数组的标准差和方差,轴、out和数据类型参数。更改数组的形状和数组堆栈更改数组的形状:a=floor(*random(,)ArrayA数组(,)A形状(,Aravel()#flattenHeArrayRow(,)A形状=(,)Atranspose()数组(,)更改数组和数组堆栈的形状数组(,)是大小(,数组数组(,)更改数组和数组堆栈的形状沿不同的轴将数组堆栈在一起:A=底板(*随机()数组数组(,)b=底板(*随机()屏障(,)vstack

6、(a,b)数组(,)hstack(a,b)数组(,)#对于那些数组,h堆栈沿第二个方向组合的维数高于二维Min()和max()可用于计算数组的最大值和最小值,而ptp()计算最大值和最小值之间的差值。它们都有轴和输出参数。这些参数的使用方式与sum()相同。Argmax()和argmin()可用于查找最大值和最小值的下标。如果返回展平的数组下标,而不指定轴参数,例如:npmin(a)npmax(a)nptp(a)max和sort,贝U可以通过unravelindex()4各维下标转换为多维数组中的下标。它的第一个参数是一维下标值。它的第二个参数是多维数组的形状:idx=npunraveinde

7、x(,ashape)idx),aidxnpargmax(a)#找数组A中最大值的下标有多个最大值,并获取第一个最大值aravel的下标()#查找展平数组中第二个元素的最大值,并在使用axis参数时沿指定的轴对最大值的下标进行排序。例如,以下结果指示数组a的第1行中最大值的下标为,第1行中最大值的下标为:以下语句使用idx选择每行的最大值:IDX=npargmax(a,axis=)idxarray(,)axrange(ashape),idxarray(,)最大值和排序数组的sort()方法用于对数组进行排序。它将改变数组的内容。函数的作用是:返回一个新数组,而不改变原来的数组。它们的轴参数的默认

8、值是,即,沿着数组的最后一个轴排序。sort()函数的轴参数可以设置为无”,此时它将在展平后获得一个新的数组进行排序。Npsort(a)#对每个行数组的数据进行排序(、)Npsort(a,axis=)#对每个列数组的数据进行排序(、#,)argsort()向后数组的最大值和排序下标轴参数默认值为:中值()可用于获取数组的中值,即数组排序后位于数组中间的值在长度相等时获取正中间两个数的平均值。它还可以指定轴和出参数:idx=npargsort(a)idxarray(,)npmedian(a,axis=)数组(,)多项式函数多项式函数是变量的整数次幂与系数的乘积之和,可以用以下数学公式表示:f(x

9、)=f(x)=anxnanohanaxaxa由于多项式函数只包括加法和乘法运算,因此它易于计算,并可用于计算其他数学函数的近似值。在数论中,多项式函数的系数可以用一维数组来表示。例如,f(x)=xx可以由下面的数组表示,其中A是最高的系数,A是常数。注意,X的系数是。A=nparray(、)多项式函数可以使用polyid()将系数转换为polyid(一元多项式)对象。这个对象可以像函数一样调用它来返回多项式函数的值:p=nppolyd(a)type(p)numpylibpolyonomalpolyydp(nplinspace(,)array(,)多项式函数对polyd对象进行加、减、乘和除相当

10、于计算相应的多项式函数。例如,p,#和pnppolyd(,)p*p#是相同的polyd(,)p*p#乘以两个多项式以获得多项式polyd(,)p,#除法返回两个多项式作为商和余数(polyd(,),polyd()多项式函数。因为多项式的除法可能不能被整除,所以它返回除法得到的商和余数。在上例中,商是xx,余数是。因此,将商和除法公式与余数相乘等于原始的p:p=nppoly(,*),并且真多项式函数的多项式对象的deriv()和integ()方法分别计算多项式函数的微分和积分:pderiv()poly(,)pinteg()poly(,)pinteg()deriv()=pTrue多项式函数多项式函

11、数的根可以使用根()函数来计算;虽然poly()函数可以将根转换为多项式的系数:r=n根(p)数组(一p(r)#根带入多项式中,以计算近似等于数组(E,E,E)n个poly(r)数组(E,E,E,E)的值。除了使用多项式对象之外,NumPy提供的多项式函数还可以直接用于对表示多项式系数的数组进行运算。函数的名称可以在IPython中通过使用自动互补来查看:polyfit()函数可以使用多项式函数来拟合一组数据,以找到最接近该组数据的多项式系数。Nppoly#按Tab键NPPONLOPLYADDNPDUDINPPEDINPPOLYNTNPPOLYNPPOLYNPULIPPERDNEPPLYEFI

12、TPMUNPPOLYLNPPOLLYMUL(,)数组(,多项式函数计算其pipi间隔最接近sin(x)函数的多项式系数:(numpppolyFITY)importnumpyasynoportpyllfilfigure(figuresize=(,)x=NPLspice(nppi,nppi,),y=npsin(x)forregin,:a=nppolyfit由于三角波形是一个分段函数,函数值的计算公式需要根据自变量的取值范围来确定,所以不能通过ufunc函数直接计算。NumPy提供了一些计算分段函数的方法。Python添加了以下判断表达式语法:当条件条件为真时,表达式的值为y;否则,它是z:NumP

13、ypiecewise使用where(心口particular。来计算三角波形x=yifconditionelsez分段函数。在numpy中,where()函数可视为判断表达式的数组版本:wherecondition、y和z是数组,其返回值是与condition形状相同的数组。当条件中的元素为真时,数组x中相应下标的值从数组y中获得;否则,它是从数组z:x=where(条件,y,z)x=nparange()npwhere(x,x,x)array()subsection函数获得的。如果y和z是单值,或者它们的形状与条件不同,则首先通过广播操作使形状一致:使用where()可以很容易地计算上一节中描

14、述的三角波形。Npwere,*x,),数组(,)deftrianglewave(x,c,c,hc):x=xxastype(npint)#因此,三角波的周期是通过仅取x坐标的小数部分来计算的。分段函数需要两个嵌套的where()进行计算,因为三角波形被分成三段。因为所有的操作和循环都是在C语言级别完成的,所以它的计算效率比frompyfunc()要高。随着分段函数段数量的增加,需要嵌套更多的where()层,但这对于编程和读取并不方便。您可以使用select()来解决这个问题。其调用形式如下:SELECT(condlist,choicelist,DEFAULT=)子节函数,其中COND列表是长度

15、为n的布尔数组列表,CHOICELIST是存储候选值的长度为n的数组列表。所有数组的长度都是m。如果列表元素不是数组,而是单个值,那么它就相当于具有相同元素值和m长度的数组。对于从到m的数组下标I,select(condlist,choiselist,default=)分段函数从布尔数组列表中找到满足条件condlistji=True的最小值j,然后outi=choicelistji,其中out是select()的返回数组。您可以使用select()来计算三角波形:缺省单波形(X,C,C,HC):X=XXASTHYPE(NPINT)RETURNNPSELECT(X=C,XC,真,XC*HC,(

16、CX)(CC)*HC)分段函数由于分段函数分为三个部分,每个列表有三个元素。choicelist的最后一个元素是“真”,这意味着当前面的所有条件都不满足时,将使用choicelist的最后一个数组中的值。当条件不满足时,您也可以使用默认参数来指定候选值数组但是,在调用where()和selectQ前,需要计算它们的所有参数,因此NumPy将计算以下数组:returnnpselct(x=c,xc,xc*HC,default=(CX)(cc)*HC)x=c,xc,xc*HC,(CX)(cc)*HC分段函数也将在计算期间生成许多保存中间结果的数组。因此,如果输入数组X非常大,将会发生大量的内存分配和

17、释放。为了解决这个问题,NumPy提供了分段()函数,专门用来计算分段函数。它的调用参数如下:分段(x,condlist,funcllist)。分段函数参数x是一个数组condlist,它保存自变量的值,并且是一个长度为m的布尔数组列表,每个布尔数组的长度与数组x相同。Funclist是长度为m或m的函数列表,这些函数的输入和输出是数组。他们计算分段函数中的每个分段。如果它不是一个函数而是一个值,它就相当于一个返回这个值的函数。每个函数对应一个在条件列表中具有相同下标的布尔数组。如果funclist的长度为Ml,则最后一个函数对应于所有条件都为False的情况。分段(x,condlist,fu

18、ncllist)分段函数下面是一个使用分段()来计算三角波形的程序:使用分段()的优点是它只计算需要计算的值,所以在上面的例子中,表达式xc*hc和(cx)(cc)*hc只计算满足条件的输入数组x的部分。默认单波(x,c,c,HC):x=xxastype(npint)返回方式(x,x=c,xc,#x=clamdax:xc*HC,#xclambdax:(CX)(cc)*HC)#其他分段函数#*编码:*使用where、select、particulate等。计算三角波形的分段函数。ImptNumPyasNPDefaultIngWave(x,C,C,hc):x=xxAstype(npint)#三角波

19、的周期是这样的,即只取x坐标的小数部分来计算returnnPWHERE(x=c,npwhere(xc,xc*hc,(cx)(cc)*hc)DefaultingWave(x,C,C,hc):x=XxastyPe(npint)returnnnpselect(x=c,xc,true,xc*hc,(x=C,C,HC)#x=clamdax:xc*HC,#xclambdax:(CX)(CC)*HC)#elsedeftrianglewave(X,C,C,HC):显示数据点的数量deff(x):printf:,xshapereturnxc*hcdf(x):printf:,xshapeRETURN(Cx)(CC

20、)*HCX=XXXASYSTYPE(NPINT)RETURNNP分段(X,X=C,xc,F,F)分段函数三角波()验证由每个函数计算的数组长度。x=NPL空间(,)y=trianglewave(x、)y=trianglewave(x、)y=trianglewave(x、)y=trianglewave(x、)npalltrue(y=y)和npalltrue(y=y)以及npalltrue(y=y)统计函数unique():按降序返回其参数数组中的所有不同值。它有两个可选参数:retumindex:Ture,这意味着原始数组中的下标同时返回。Retuninverse:True表示用于重建原始数组的

21、下标数组。下面是一个例子来说明unique()的用法。首先,使用randint()创建一个随机整数数组,其元素、值的范围为:a=nprandomrandint(,)数组(,)统计函数可以找到数组a到唯一(a)中的所有整数,并按顺序排列它们:如果参数returnindex为True,将返回两个数组。第二个数组是原始数组中第一个数组的下标:npunique(a激组(l、)x,idx=npunique(a,returnindex=true)xarray(,idxarray(,统计函数数组idx保存数组a中数组x中每个元素的下标:如果returninverse参数为true,则返回的第二个数组是数组x

22、中原始数组a中每个元素的下标:aidxarray(,)x,ridx=npunique(a,returninverse=True)ridxarra,)all(xridx=a)#原始数组a和xridx完全相同True统计函数bincount():计算整数数组中每个元素的出现次数,它要求数组中的所有元素都为非负。返回数组中第I个元素的值表示整数I在参数数组中出现的次数。从以上结果可以看出,在数组A中有两个、2、1、2、1和2,而、等数。不要出现在数组A中.Npbincount(a)数组(、)统计函数可以通过权重参数指定每个数字对应的权重。当指定了权重参数时,bincount(x,权重=w)返回对应于

23、数组x中每个整数的权重之和。示例:在上面的结果中,数组X中对应的W中的值(和)的和是对应的W中的值(、和)的和,但是对应的W中的值(和)的和。X=NP数组(,)W=NP数组()NPBinCount(X,W)数组(,):如果统计函数需要一个平均值,则求和结果可以除以次数:NPBinCount(x,w)NPBinCount(x)数组(,)统计函数直方图():一维数组的直方图统计具有以下参数列表:其中A是由保存要计数的数据的数组容器指定的间隔数,即统计范围的等份。Range是一个长度为的元组,表示统计范围的最小值和最大值默认为无,表示范围由数据范围决定,即(amin(),amax()当赋范参数为Fa

24、lse时,函数返回数组A中每个区间的数据数;否则,对该数字进行归一化,使其等于每个区间的概率密度。权重参数类似于bincount()。直方图(a,bins=,range=none,normed=false,weights=none)统计函数直方图()返回两个一维数组hist和binedges,第一个数组是每个区间的统计结果,第二个数组是len长度(hist),每两个相邻的值形成一个统计区间。让我们看一个例子:首先,创建一个一维随机数组A,然后使用直方图()对数组A中的数据进行直方图统计结果显示,rand()创建的随机数平均分布在到的范围内,元素的值介于到和到之间。a=nprandomrand(

25、)n直方图(a,bins=,range=(,)(数组(,),数组(,)统计函数如果要计数的间隔长度不相等,则指示间隔分隔位置的数组可以传递给bin参数,例如:结果指示在和之间的一对值之间有一个值。如果为数组a中的每个元素指定了权重,那么直方图()将对与区间NP直方图(a,bins=,range=(,)(数组(,),数组(,)统计函数中的值相对应的权重求和。这是使用直方图()来计算男性青少年的年龄和身高的示例。Heightcsv(年龄在到岁之间的男性青少年身高的统计数据)首先使用loadtxt()从数据文件中加载数据:在数组D中,第一列是年龄,第二列是身高。您可以看到,年龄范围从到:D=nloa

26、dtxt(heightcsv,delimiter=,)dshape(,)npmin(d:,)npmax(d:,)统计函数汇总以下数据总和是每个年龄组的身高总和CNT是每个年龄组的数据数量,因此很容易计算每个年龄组的平均身高:总和=NP直方图(D:,)面元=范围(,范围=(,)权重=D:,)面元=NP直方图(D:,面元=范围,),范围=(,)求和矩阵(,)在numpy的线性代数模块linalg中可以找到一些用于求解矩阵线性方程的高级运算。例如,inv()可以计算逆矩阵求解()来求解多元线性方程组。下面是求解()的一个例子:求解()有两个参数A和ba是N*N的二维数组,b是长度为N的维,这使得so

27、lve()能够找到长度为nx的一维数组,以便它们满足abullx=b,即x是这个一元方程组的解。A=nprandomrand(,)b=nprandomrand()x=nplinalgsolve(a,b)npsum(npab(npdot(ax)b)e求解线性方程lstsq()比求解()更一般化。它不要求矩阵a是平方的,也就是说,方程的数目可以小于、等于或大于未知数的数目。它找到一组解决方案x来最小化babullx。我们称这个结果为最小二乘解,也就是说,它使所有方程的误差平方和最小。numpillalglstsq(A,b,rcond=)rcond:float,optionalrevolutions

28、:X:ndaarraylestSsquaressionresiduals:ndarraysumsoffresidualsArticas:(min(M,N),(ndarraySingularvaluesofa法解线性方程示例斜体,Y=MXC,通过somenoisydatapoints:X=Npaaray(,)Y=NpaArray(,)A=Npaastack(X,NpaOnes(Len(X)Ta数组(,.该模块可用于计算逆矩阵、特征值、线性方程组和行列式的解等。在线性代数中,矩阵A和它的逆矩阵A相乘得到一个单位矩阵I这个定义可以写成numpylinalg模块中的inv函数可以计算逆矩阵。按如下方式

29、反转矩阵。NUMPYLLINALG模块使用NUMPYLLINALG模块中的inv函数来计算逆矩阵,并且检查原始矩阵乘以所获得的逆矩阵的结果是否确实是单位矩阵。反向复制文件。importnumpYanspA=npmat()#®用mat函数创建个示例矩阵printan,inverte=nplinalginv(a)printinverteofan,inverteprintcheckn。一个*逆代数模块ImportNumpYanspA=NPMAT()printan,AB=NpaArray(,)printbn,BX=NpalgSolve(A,B)printSolution,XPrintchec

30、kN,Npdot(A,X)求解线性方程中的函数解可以Ax=b的形式求解线性方程,其中A是矩阵,B是一维或二维数组,X是未知变量。num柱面模的特征值和特征向量特征值(特征值),即方程Ax=ax的根,是标量。其中a是二维矩阵,x是一维向量。特征向量是关于特征值的向量。在numpylinalg模块中,eigvals函数可以计算矩阵的特征值,eig函数可以返回包含特征值和相应特征向量的元组。Numpylinalg模块importnumpyanpa=npmat()printan,aprinteigenvalues,nplingeigvs特征值,特征向量=nplingeig(a)printfirsttu

31、pleofeig,特征值sprintsecondupleofeign,特征向量foriirange(len(特征值):printleft,npdot(a,特征向量:,i)printright,特征值*特征向量:,inumpylinalg模块中的svd函数可以对矩阵执行奇异值分解。该函数返回矩阵U、°和v,其中U和v是包含输入矩阵奇异值的正交矩阵优ImportNumPinspA=npmat()Printan,AU,Sigma,V=nplinalgsvd(A,fullmatrix=False)PrintupintPrintSigmaprintVPrintProductN,U*nPDIAG

32、(Sigma)*VNUMPILINALG模块广义逆矩阵MooremiddotPenrose广义逆矩阵(MoorePenrosepseudoinverse)T以使用NUMPPILINALG模块中的pinv函数来求解。计算广义逆矩阵需要奇异值分解。Inv函数只接受方阵作为输入矩阵,而pinv函数没有这个限制。IMPORTNumPyaNSpA=NPMAT()printan,APSUDOINV=NPLINALGGPINV(A)PRINTAPUNIVPRINTERSEN,PSEUDOINVPRINTCHECK,det函数中的A*PSEUDOINVnumpylinalg模块行列式可以计算矩阵的行列式。im

33、portnumpyasnpa=npmat()printan,aprintdeterminent,nplinalgdet(a)RankimportnumpyasnpI=npeye()#首先仓U建个单位数组Iaray(,)NPLINALGALGMATRIXRANK(I)#RankI,=#将元素设置为Iaray(,)NPLINALGALGMATRIXRANK(I)#此时,该秩变为Nmpy线性代数汇总建立矩阵a=nparray(,dttype=int)#一维数组数据类型的建立是int您也可以不指定数据类型而使用默认值。几乎所有的数组构建函数都可以指定数据类型的值。A=nparray(,)#创建二维数组

34、。这与用MATLAB建立二维数组(矩阵)有很大不同。类似地,numpy有许多内置的特殊矩阵:b=npzeros()#生成行和列的完整矩阵。请注意,该参数是一个元组:(,),因此有两个括号。完整的形式是:零(形状,数据类型=)。相同的结构有一个()来构建一个完整的矩阵。Empty()创建一个空矩阵,并用内存中的随机值填充它。b二恒等式(n)#创建一个n*n的单位矩阵。这只能是一个方Nmpy线性代数摘要b=eye(N,M=None,k=)#创建一个带有剩余值对角线的矩阵,并使用k指定对角线位置。默认无。此外,numpy还提供了几个类似的函数,即根据已知数组的大小(几行几列)建立一个相同大小的特殊数

35、组。这样的函数有零类()、空类()、类()。它们的参数都是这种形式:zeroslike(a,dtype=),其中a是一个已知的数组。C=范围(,#开始和结束步长值。包括开始值但不包括结束值。c=开始和结束间隔中的n点空间(,)#个点。包括起点和终点。类似地,在MATLAB中,logspace()®数Nmpy线性代数概要D=NpinalGONION(A)#伴随矩阵D=D=Npinalgtriu()tril()#()#函数与函数E=NPRANDOM(,)同名,以生成行和列的随机数组。在同一个空间中,有许多随机函数,如randn()randint()等。fliplr()flipd()rot()#。该函数类似于MATLAB的函数。Xx=nproll(x),#roll()是循环移位函数。这个调用意味着向右循环位。Nmpy线性代数总结了数组的特征信息:首先假设有一个N维数组X,然后可以得到X的一些属性。这些属性可以在输入X和1后按tab键查看。Python面向对象的特性在这里显而易见。Xflags#数组的存储信息。Xshape#吉果是一个元组,它返回数组中的行数、列数、xdim#数组的维度结果是

温馨提示

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

评论

0/150

提交评论