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

上传人:b****2 文档编号:2561421 上传时间:2022-11-01 格式:PPT 页数:92 大小:423.50KB
下载 相关 举报
Python科学计算与数据处理.ppt_第1页
第1页 / 共92页
Python科学计算与数据处理.ppt_第2页
第2页 / 共92页
Python科学计算与数据处理.ppt_第3页
第3页 / 共92页
Python科学计算与数据处理.ppt_第4页
第4页 / 共92页
Python科学计算与数据处理.ppt_第5页
第5页 / 共92页
点击查看更多>>
下载资源
资源描述

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

《Python科学计算与数据处理.ppt》由会员分享,可在线阅读,更多相关《Python科学计算与数据处理.ppt(92页珍藏版)》请在冰豆网上搜索。

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

1NumPy函数库目录o求和、平均值、方差o更改数组的形状与数组堆叠o最值和排序o多项式函数o分段函数o统计函数o解线性方程组2o函数库除了前面介绍的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.)更改数组的形状与数组堆叠o12a1array(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)aidx9np.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)axrange(a.shape0),idxarray(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,98,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可以用下面的数组表示,其中a0是最高次的系数,a-1是常数项,注意x2的系数为0。

19a=np.array(1.0,0,-2,1)多项式函数可以用poly1d()将系数转换为poly1d(一元多项式)对象,此对象可以像函数一样调用,它返回多项式函数的值:

20p=np.poly1d(a)type(p)p(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)多项式函数计算-pi/2pi/2区间与sin(x)函数最接近的多项式的系数:

(numpy_polyfit.py)26importnumpyasnpimportpylabasplpl.figure(figsize=(8,4)x=np.linspace(-np.pi/2,np.pi/2,1000)y=np.sin(x)fordegin3,5,7:

a=np.polyfit(x,y,deg)error=np.abs(np.polyval(a,x)-y)printpoly%d:

%deg,aprintmaxerroroforder%d:

%deg,np.max(error)pl.semilogy(x,error,label=u%d阶多项式的误差%deg)pl.legend(loc=3)pl.axis(tight)pl.show()多项式函数27poly3:

-1.45021094e-01-6.39518172e-169.8

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1