第-10-章-SciPy科学计算《Python数据分析与可视化》教学课件_第1页
第-10-章-SciPy科学计算《Python数据分析与可视化》教学课件_第2页
第-10-章-SciPy科学计算《Python数据分析与可视化》教学课件_第3页
第-10-章-SciPy科学计算《Python数据分析与可视化》教学课件_第4页
第-10-章-SciPy科学计算《Python数据分析与可视化》教学课件_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

《Python数据分析与可视化》✩精品课件合集Python数据分析与可视化第10章SciPy科学计算基础第10章SciPy科学计算基础Scipy是一款用于数学、科学和工程领域的Python工具包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。304一月202510.1SciPy中的常数与特殊函数1SciPy的constants模块SciPy的constants模块包含了大量用于科学计算的常数。404一月2025In[1]fromscipyimportconstantsasCprint(C.pi)#圆周率print(C.golden)#黄金比例print(C.c)#真空中的光速print(C.h)#普朗克常数print(C.mile)#一英里等于多少米print(C.inch)#一英寸等于多少米print(C.degree)#一度等于多少弧度print(C.minute)#一分钟等于多少秒print(C.g)#标准重力加速度out[1]【例10-1】显示constants模块中的常用常数。10.1SciPy中的常数与特殊函数2

SciPy的special模块SciPy的special模块包含了大量函数库,包括基本数学函数、特殊函数以及NumPy中的所有函数。504一月2025【例10-2】special模块中的常用函数。fromscipyimportspecialasSprint(S.cbrt(8))#立方根print(S.exp10(3))#10**3print(S.sindg(90))#正弦函数,参数为角度print(S.round(3.1))#四舍五入函数print(S.round(3.5))print(S.round(3.499))print(S.comb(5,3))

#从5个中任选3个的组合数print(S.perm(5,3))#排列数print(S.gamma(4))#gamma函数print(S.beta(10,200))#beta函数print(S.sinc(0))#sinc函数10.2SciPy中的线性代数运算SciPy.linalg是SciPy中实现线性代数计算的模块,常用的导入方式为:fromscipyimportlinalg在NumPy中,矩阵有矩阵类型和二维数组两种表示方法。(1)数组类型下的基本操作矩阵类型数据可以用np.mat()或mat.matrix()创建。【例10-3】矩阵的创建及其简单运算。604一月2025fromscipyimportlinalgimportnumpyasnpA=np.mat('[1,2;3,4]')print('A矩阵为:\n',A)print('A的转置矩阵为:\n',A.T)print('A的逆矩阵为:\n',A.I)10.2SciPy中的线性代数运算704一月2025(2)

矩阵类型下的基本操作矩阵也可以用二维数组对象表示,数组对象的矩阵操作与矩阵对象有一定的区别。【例10-4】数组的创建及其简单运算。M=np.array([[1,2],[3,4]])print('M矩阵为:\n',M)print('M的转置矩阵为:\n',M.T)print('M的逆矩阵为:\n',linalg.inv(M))M矩阵为:[[12][34]]M的转置矩阵为:[[13][24]]M的逆矩阵为:[[-2.1.][1.5-0.5]]10.2SciPy中的线性代数运算804一月20252.线性方程组求解除了通过矩阵的逆求解外可以直接使用linalg.solve()函数求解而且效率更高。【例10-5】线性方程组求解。In[5]:fromscipyimportlinalgimportnumpyasnpa=np.array([[1,3,5],[2,5,-1],[2,4,7]])b=np.array([10,6,4])x=linalg.solve(a,b)print(x)Out[5]:[-14.315789477.052631580.63157895]10.2SciPy中的线性代数运算904一月20253.行列式的计算行列式是一个将方阵映射到标量的函数。linalg.det()可以计算矩阵的行列式。【例10-6】矩阵行列式的计算。In[6]:M=np.array([[1,2],[3,4]])linalg.det(M)Out[6]:-2.010.2SciPy中的线性代数运算1004一月20254.范数行列式是一个将方阵映射到标量的函数。linalg.det()可以计算矩阵的行列式。矩阵范数含义Frobenius矩阵所有元素平方和的平方根L范数矩阵中每列元素和的最大值-1范数矩阵中每列元素和的最小值2范数矩阵的最大奇异值-2范数矩阵的最小奇异值正无穷范数矩阵每行元素和的最大值负无穷范数矩阵每行元素和的最小值范数是数学上一个类似“长度”的概念。linalg.norm()函数可以计算向量或矩阵的范数(或者模)。常见范数及其含义见下表。M=np.array([[1,2],[3,4]])print('M矩阵为:\n',M)print('M矩阵的L范数为:\n',linalg.norm(M,1))print('M矩阵的2范数为:\n',linalg.norm(M,2))10.2SciPy中的线性代数运算1104一月20255.特征值求解函数linalg.eig()可以用来求解特征值和特征向量。In[8]:A=np.array([[1,2],[3,4]])l,v=linalg.eig(A)print(l)print(v)Out[8]:[-0.37228132+0.j5.37228132+0.j][[-0.82456484-0.41597356][0.56576746-0.90937671]]奇异值分解是一个能适用于任意的矩阵的一种分解的方法,它将M×N的矩阵A分解为10.2SciPy中的线性代数运算1204一月20256.奇异值分解矩阵主对角线上的元素被称为奇异值。函数linalg.svd()可以实现矩阵的奇异值分解。

【例10-9】矩阵的奇异值分解。fromnumpyimport*data=mat([[1,2,3],[4,5,6]])U,sigma,VT=np.linalg.svd(data)print('U:',U)print('SIGMA:',sigma)print('VT:',VT)

10.3SciPy中的优化1304一月2025SciPy.optimize包提供了几种常用的优化算法,包括用来求有/无约束的多元标量函数最小值算法,最小二乘法,求有/无约束的单变量函数最小值算法,还有解各种复杂方程的算法。1.

方程求解及求极值使用SciPy.optimize模块的root和fsolve函数进行数值求解线性及非线性方程求方程的根。【例10-10】利用root函数求方程的解。

fromscipy.optimizeimportrootdeffunc(x):returnx*2+2*np.cos(x)sol=root(func,0.3)#0.3估计初始值print(sol)

10.3SciPy中的优化1404一月2025使用fmin,fminbound可以求函数的极值。【例10-11】函数极值求解。

importnumpyasnpfrommatplotlibimportpyplotaspltfromSciPy.optimizeimportfmin,fminbounddeff(x):returnx**2+10*np.sin(x)+1x=np.linspace(-10,10,num=500)min1=fmin(f,3)#求3附近的极小值min2=fmin(f,0)#求0附近的极小值min_global=fminbound(f,-10,10)#这个区域的最小值print(min1)print(min2)print(min_global)plt.plot(x,f(x))plt.show()

10.3SciPy中的优化1504一月20252数据拟合(1)多项式拟合

10.3SciPy中的优化1604一月2025【例10-12】多项式拟合。

In[12]:importmatplotlib.pyplotaspltx=np.linspace(-5,5,20)y=3.5*x+2.1y_noise=y+np.random.randn(20)*2coeff=np.polyfit(x,y_noise,1)plt.plot(x,y_noise,'x',x,coeff[0]*x+coeff[1])plt.show()Out[12]:2数据拟合(1)多项式拟合最小二乘拟合(LeastSquares)是一种常用的数学优化技术,通过最小化误差的平方和在寻找一个与数据匹配的最佳函数。要使用最小二乘优化,需要先定义误差函数:其中,p表示要估计的真实参数,x是函数的输入,y表示输入对应的数据值。最小二乘估计对应的函数为optimize.leastsq(),可以利用该函数和定义的误差函数,对真实参数进行最小二乘估计。

10.3SciPy中的优化1704一月20252数据拟合(2)最小二乘拟合deferrf(p,x,y): returny-func(x,*p)

10.3SciPy中的优化1804一月2025【例10-14】最小二乘估计示例。fromscipyimportoptimizedefmyfunc(x,a,b,w,t):returna*np.exp(-b*np.sin(w*x+t))x=np.linspace(0,2*np.pi)par=[3,2,1.25,np.pi/4]y=myfunc(x,*par)y_noise=y+0.8*np.random.randn(len(y))deferrf(p,x,y):returny-myfunc(x,*p)c,rv=optimize.leastsq(errf,[1,1,1,1],args=(x,y_noise))#c返回找到的最小二乘估计plt.plot(x,y_noise,'x',x,y,x,myfunc(x,*c),':')plt.legend(['data','actual','leastsq'])plt.show()可以不定义误差函数,用函数optimize.curve_fit()直接对函数myfunc的参数直接进行拟合。【例10-15】曲线拟合示例。

10.3SciPy中的优化1904一月20252数据拟合(3)曲线拟合In[15]:p,e=optimize.curve_fit(myfunc,x,y_noise)print('p是对参数的估计值:\n',p)print('e是4个估计参数的协方差矩阵:\n',e)Out[15]:p是对参数的估计值:[3.282925361.901027391.24788380.78989363]e是4个估计参数的协方差矩阵:[[0.17453746-0.052480310.01959142-0.06158022][-0.052480310.01606779-0.005729880.01801028][0.01959142-0.005729880.00271714-0.00854062][-0.061580220.01801028-0.008540620.02707182]]10.4SciPy中的稀疏矩阵处理1稀疏矩阵的存储稀疏矩阵(SparseMatrix)是只有少部分元素值是非零的矩阵。如果按照正常方式存储所有元素,则这些矩阵将占用巨大空间,因此,稀疏矩阵只保存非零值及对应的位置。SciPy.sparse是SciPy中负责稀疏矩阵的模块。在SciPy中,根据存储方式的不同,可以将稀疏矩阵分为以下几类:bsr_matrix(BlockSparseRowmatrix):分块存储,基于行coo_matrix(AsparsematrixinCOOrdinateformat):坐标形式存储(COO)csc_matrix(CompressedSparseColumnmatrix):基于列的压缩存储(CSC)csr_matrix(CompressedSparseRowmatrix):基于行的压缩存储(CSR)dia_matrix(SparsematrixwithDIAgonalstorage):对角线存储dok_matrix(DitictionaryOfKeysbasedsparsematrix):基于键值对的存储lil_matrix(Row-basedlinkedlistsparsematrix):基于行的链表存储2004一月202510.4SciPy中的稀疏矩阵处理2

稀疏矩阵的运算由于稀疏矩阵数据量大,一般不使用普通矩阵作为参数来构建,而是采用非零数据点及坐标的形式构建。【例10-16】稀疏矩阵的基本运算。2104一月2025importnumpyasnpfromscipyimportsparsesparse.coo_matrix((2,3))#创建空的稀疏矩阵A=sparse.coo_matrix([[1,2,0],[0,1,0],[2,0,0]])#将普通矩阵转为稀疏矩阵print(A)print(type(A))

#查看A的类型print(type(A.tocsc()))#不同类型的稀疏矩阵可以相互转换v=np.array([1,3,-3])print(A*v)10.4SciPy中的稀疏矩阵处理【例10-17】稀疏矩阵的构建。2204一月2025In[17]:data=[1,2,3,4]rows=[0,0,1,2]cols=[0,1,2,2]W=sparse.coo_matrix(data,(rows,cols))print('稀疏矩阵W:\n',W)r,c,d=sparse.find(W)#find()函数返回非零元素的行、列和具体数值print('稀疏矩阵W非零值:\n',r,c,d)Out[17]:稀疏矩阵W:(0,0) 1(0,1) 2(0,2) 3(0,3) 4稀疏矩阵W非零值:[0000][0123][1234]10.5SciPy中的图像处理简单的介绍一下SciPy在图像处理方面的应用,如果专业做图像处理当然还是建议使用OpenCV。2304一月20251图像平滑图像平滑是指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度,改善图像质量的图像处理方法。图像平滑的方法包括:插值方法,线性平滑方法,卷积法等。10.5SciPy中的图像处理【例10-18】ndimage.median_filter实现中值滤波。2404一月2025importnumpyasnpfromscipyimportndimagefromscipyimportmiscimportmatplotlib.pyplotasplt%matplotlibinlineimage=misc.ascent()aa=plt.subplot(1,3,1)plt.title("title")plt.imshow(image)plt.axis('off')plt.subplot(1,3,2)plt.title("medi_filter")filter=ndimage.median_filter(image,size=10)#使用SciPy的中值滤波处理图片plt.imshow(filter)plt.axis('off')plt.subplot(1,3,3)plt.title("gausfilter")blurre

温馨提示

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

评论

0/150

提交评论