4.Python科学计算与数据处理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1NumPy—函数库目录求和、平均值、方差更改数组的形状与数组堆叠最值和排序多项式函数分段函数统计函数解线性方程组2函数库除了前面介绍的ndarray数组对象和ufunc函数之外,NumPy还提供了大量对数组进行处理的函数。充分利用这些函数,能够简化程序的逻辑,提高运算速度。3求和、平均值、方差sum()计算数组元素之和,也可以对列表、元组等和数组类似的序列进行求和。当数组是多维时,它计算数组中所有元素的和:4a=np.random.randint(0,10,size=(4,5))aarray([[7,1,9,6,3],[5,1,3,8,2],[9,8,9,4,0],[9,5,1,7,0]])np.sum(a)97求和、平均值、方差如果指定axis参数,求和运算将沿着指定的轴进行。在上面的例子中,数组a的第0轴长度为4,第1轴长度为5。如果axis参数为1,就对每行上的5个数求和,所得的结果是长度为4的一维数组。如果参数axis为0,就对每列上的4个数求和,结果是长度为5的一维数组。即,结果数组的形状是原始数组的形状除去其第axis个元素:5np.sum(a,axis=1)array([26,19,30,22])np.sum(a,axis=0)array([30,15,22,25,5])求和、平均值、方差上面的例子将产生一个新的数组来保存求和结果,如果希望将结果直接保存到另外一个数组中,可以和ufunc函数一样使用out参数指定输出数组,它的形状必须和结果数组的形状相同。6求和、平均值、方差sum()默认使用和数组的元素类型相同的累加变量进行计算,如果元素类型为整数,就使用系统的默认整数类型作为累加变量。在32位系统中,累加变量的类型为32bit整型。因此对整数数组进行累加时可能会出现溢出问题,即数组元素的总和超过了累加变量的取值范围。而对很大的单精度浮点数类型数组进行计算时,也可能出现精度不够的现象,这时可以通过dtype参数指定累加变量的类型。在下面的例子中,我们对一个元素都为1.1的单精度数组进行求和,比较单精度累加变量和双精度累加变量的计算结果:7求和、平均值、方差8b=np.ones(1000000,dtype=np.float32)*1.1#创建一个很大的单精度浮点数数组b#1.1无法使用浮点数精示,存在一些误差array([1.10000002,1.10000002,…,1.10000002],dtype=float32)np.sum(b)#使用单精度累加变量进行累加计算,误差将越来越大1110920.5np.sum(b,dtype=np.double)#使用双精度浮点数则能够得到正确的值1100000.0238418579求和、平均值、方差mean()用于求数组的平均值,也可以通过axis参数指定求平均值的轴,通过out参数指定输出数组。和sum()不同的是,对于整数数组,它使用双精度浮点数进行计算,而对于其他类型的数组,则使用和数组元素类型相同的累加变量进行计算:9np.mean(a,axis=1)#整数数组使用双精度浮点数进行计算array([5.2,3.8,6.,4.4])np.mean(b)#单精度浮点数使用单精度浮点数进行计算1.1109205np.mean(b,dtype=np.double)#用双稍度浮点数计算平均值1.1000000238418579求和、平均值、方差除此之外,average()也可以对数组进行平均计算。它没有out和dtype参数,但有一个指定每个元素权值的weights参数,可在IPython中输入“np.average?”来査看使用说明。std()和var()分别计算数组的标准差和方差,有axis、out及dtype等参数。10更改数组的形状与数组堆叠更改数组的形状:11a1=floor(10*random.random((3,4)))a1array([[7.,5.,9.,3.],[7.,2.,7.,8.],[6.,8.,3.,2.]])a1.shape(3,4)a1.ravel()#flattenthearrayarray([7.,5.,9.,3.,7.,2.,7.,8.,6.,8.,3.,2.])a1.shape=(6,2)a1.transpose()array([[7.,9.,7.,7.,6.,3.],[5.,3.,2.,8.,8.,2.]])更改数组的形状与数组堆叠12a1array([[7.,5.],[9.,3.],[7.,2.],[7.,8.],[6.,8.],[3.,2.]])a1.resize(2,6)a1array([[7.,5.,9.,3.,7.,2.],[7.,8.,6.,8.,3.,2.]])更改数组的形状与数组堆叠沿不同轴将数组堆叠在一起:13a2=floor(10*random.random((2,2)))a2array([[1.,1.],[5.,8.]])b2=floor(10*random.random((2,2)))b2array([[3.,3.],[6.,0.]])vstack((a2,b2))array([[1.,1.],[5.,8.],[3.,3.],[6.,0.]])hstack((a2,b2))array([[1.,1.,3.,3.],[5.,8.,6.,0.]])#对那些维度比二维更高的数组,hstack沿着第二个轴组合,vstack沿着第一个轴组合,concatenate允许可选参数给出组合时沿着的轴。最值和排序用min()和max()可以计算数组的最大值和最小值,而ptp()计算最大值和最小值之间的差。它们都有axis和out两个参数。这些参数的用法和sum()相同。用argmax()和argmin()可以求最大值和最小值的下标。如果不指定axis参数,就返回平坦化之后的数组下标,例如:14np.min(a2)1.0np.max(a2)9.0np.ptp(a2)8.0最值和排序可以通过unravel_index()将一维下标转换为多维数组中的下标,它的第一个参数为一维下标值,第二个参数是多维数组的形状:15idx=np.unravel_index(2,a.shape)idx(0,2)a[idx]9np.argmax(a)#找到数组a中最大值的下标,有多个最值时得到第一个最值的下标2a.ravel()[2]#求平坦化之后的数组中的第二个元素9最值和排序当使用axis参数时,可以沿着指定的轴计算最大值的下标。例如下面的结果表示,在数组a中,第0行中最大值的下标为2,第1行中最大值的下标为3:下面的语句使用idx选择出每行的最大值:16idx=np.argmax(a,axis=1)idxarray([2,3,0,0])a[xrange(a.shape[0]),idx]array([9,8,9,9])最值和排序数组的sort()方法用于对数组进行排序,它将改变数组的内容。而sort()函数则返回一个新数组,不改变原始数组。它们的axis参数默认值都为-1,即沿着数组的最后一个轴进行排序。sort()函数的axis参数可以设置为None,此时它将得到平坦化之后进行排序的新数组。17np.sort(a)#对每行的数据进行排序array([[1,3,6,7,9],[1,2,3,5,8],[0,4,8,9,9],[0,1,5,7,9]])np.sort(a,axis=0)#对每列的数据进行排序array([[5,1,1,4,0],[7,1,3,6,0],[9,5,9,7,2],[9,8,9'8,3]])最值和排序argsort()返冋数组的排序下标,axis参数的默认值为-1:用median()可以获得数组的中值,即对数组进行排序之后,位于数组中间位置的值,当长度是偶数时,得到正中间两个数的平均值。它也可以指定axis和out参数:18idx=np.argsort(a)idxarray([[1,4,3,0,2],[1,4,2,0,3],[4,3,1,0,2],[4,2,1,3,0]])np.median(a,axis=0)array([8.,3.,6.,6.5,1.])多项式函数多项式函数是变量的整数次幂与系数的乘积之和,可以用下面的数学公式表示:f(x)=anxn+an-1xn-1+…+a2x2+a1x+a0由于多项式函数只包含加法和乘法运算,因此它很容易计算,并且可以用于计算其他数学函数的近似值。在NumPy中,多项式函数的系数可以用一维数组表示,例如f(x)=x3-2x+1可以用下面的数组表示,其中a[0]是最高次的系数,a[-1]是常数项,注意x2的系数为0。19a=np.array([1.0,0,-2,1])多项式函数可以用poly1d()将系数转换为poly1d(一元多项式)对象,此对象可以像函数一样调用,它返回多项式函数的值:20p=np.poly1d(a)type(p)numpy.lib.polynomial.poly1dp(np.linspace(0,1,5))array([1.,8.515625,0.125,-0.078125,0.])多项式函数对poly1d对象进行加减乘除运算相当于对相应的多项式函数进行计算。例如:21p+[-2,1]#和p+np.poly1d([-2,1])相同poly1d([1.,0.,-4.,2.])p*p#两个3次多项式相乘得到一个6次多项式poly1d([1.,0.,-4.,2.,4.,-4.,1.])p/[1,1]#除法返回两个多項式,分别为商式和余式(poly1d([1.,-1.,-1.]),poly1d([2.]))多项式函数由于多项式的除法不一定能正好整除,因此它返回除法所得到的商式和余式。上面的例子中,商式为x2-x-1,余式为2。因此将商式和被除式相乘后,再加上余式就等于原来的P:22p==np.poly1d([1.,-1.,-1.])*[1,1]+2True多项式函数多项式对象的deriv()和integ()方法分别计算多项式函数的微分和积分:23p.deriv()poly1d([3.,0.,-2.])p.integ()poly1d([0.25,0.,-1.,1.,0.])p.integ().deriv()==pTrue多项式函数多项式函数的根可以使用roots()函数计算:而poly()函数可以将根转换冋多项式的系数:24r=np.roots(p)rarray([-1.61803399,1.,0.61803399])p(r)#将根带入多项式计算,得到的值近似为0array([-4.21884749e-15,-4.44089210e-16,-2.22044605e-16])np.poly(r)array([1.00000000e+00,9.99200722e-16,-2.000000000e+00,1.00000000e+00])多项式函数除了使用多项式对象之外,还可以直接使用NumPy提供的多项式函数对表示多项式系数的数组进行运算。可以在IPython中使用自动补全査看函数名:其中:polyfit()函数可以对一组数据使用多项式函数进行拟合,找到和这组数据最接近的多项式的系数。25np.poly#按Tab键np.polynp.polyaddnp.polydivnp.polyintnp.polysubnp.poly1dnp.polydernp.polyfitnp.polymulnp.polyvalnp.polymul([1,1],[1,1])array([1,2,1])多项式函数

1 / 92
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功