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

下载本文档

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

文档简介

SciPy主命名空间SciPy主命名空间方法与属性函数/属性及说明:LowLevelCallable(function[,user_data,…])//低级回调函数show_config([mode])//显示构建和正在使用SciPy的库和系统信息test()//对此命名空间运行测试__version__//SciPy版本SciPy主命名空间方法与属性导入方式I:导入方式II:importscipy

result=scipy.optimize.curve_fit(…)fromscipyimportoptimize

result=optimize.curve_fit(…)

示例:curve_fit函数导入方式有如下两种。SciPy模块功能表及说明常用SciPy模块功能表示例:模块名称功能scipy.cluster聚类分析等scipy.constants物理和数学常数scipy.datasets加载SciPy数据集scipy.linalg线性代数scipy.optimize数值优化scipy.ndimagelN维图像处理与插值scipy.stats统计函数代码

示例:使用魔法属性查看scipy模块公开接口与内置文档SciPy模块功能表及说明print(scipy.__all__)

print(scipy.__doc__)谢谢THANKYOUSciPy常数和单位SciPy常数和单位由子模块scipy.constants提供的常量数学常量:pi(圆周率) golden(黄金比率) golden_ratio(黄金比率)物理常量:speed_of_light(真空中的光速)

g(标准重力加速度)

e(基本电荷常数)模块调用:fromscipyimportconstantsSciPy常数和单位运行结果代码

示例:获取常用数学常量与物理常量。3.1415926535897931.6180339887498951.618033988749895299792458.09.806651.602176634e-19fromscipyimportconstants

print(constants.pi)

print(constants.golden)

print(constants.golden_ratio)

print(constants.speed_of_light)

print(constants.g)

print(constants.e)SciPy常数和单位由子模块scipy.constants提供的单位常量二进制单位:kibi、mebi、gibi等。质量单位:gram、metric_ton等。时间单位:minute、hour、day等。长度单位:inch、yard等。速度单位:kmh、mph、mach等。温度单位:zero_Celsius、degree_Fahrenheit等。面积单位:hectare、acre等。谢谢THANKYOUSciPy线性代数1.矩阵的基本运算2.特征值计算3.矩阵分解4.线性方程组求解5.特殊矩阵1.矩阵的基本运算运行结果代码

示例:计算矩阵的逆。importnumpyasnp

fromscipyimportlinalg

a=np.array([[1.,2.],[3.,4.]])

a_inv=linalg.inv(a)

print('A矩阵的逆矩阵为:\n%s'%a_inv)A矩阵的逆矩阵为:[[-2.1.][1.5-0.5]](1)逆运算:scipy.linalg.inv(a,overwrite_a=False,check_finite=True)调用格式:1.矩阵的基本运算运行结果代码

示例:使用det函数计算矩阵的行列式。importnumpyasnp

fromscipyimportlinalg

a=np.array([[1,2,3],[4,5,6],[7,8,9]])

print(linalg.det(a))

b=np.array([[0,2,3],[4,5,6],[7,8,9]])

print(linalg.det(b))

c=np.array([[[[1.,2.],[3.,4.]],

[[5.,6.],[7.,8.]]],

[[[9.,10.],[11.,12.]],

[[13.,14.],[15.,16.]]],

[[[17.,18.],[19.,20.]],

[[21.,22.],[23.,24.]]]])

print(linalg.det(c))

print(linalg.det(c[0,0]))0.03.0[[-2.-2.][-2.-2.][-2.-2.]]-2.0(2)行列式:scipy.linalg.det(a,overwrite_a=False,check_finite=True)调用格式:1.矩阵的基本运算运行结果代码

示例:使用norm函数计算范数。importnumpyasnp

fromscipy.linalgimportnorm

a=np.arange(9)-4.0

b=a.reshape((3,3))

print(a)

print(b)

print(norm(a))

print(norm(b))

print(norm(b,'fro'))[-4.-3.-2.-1.0.1.2.3.4.][[-4.-3.-2.][-1.0.1.][2.3.4.]]7.7459666924148347.7459666924148347.745966692414834(3)矩阵或向量的范数:scipy.linalg.norm(a,ord=None,axis=None,keepdims=False,check_finite=True)调用格式:2.特征值计算运行结果代码

示例:特征值计算。importnumpyasnp

fromscipyimportlinalg

a=np.array([[0.,-1.],[1.,0.]])

print('归一化左特征向量:\n%s'%linalg.eig(a,left=True,right=False)[1])

print('归一化右特征向量:\n%s'%linalg.eig(a,left=False,right=True)[1])归一化左特征向量:[[-0.70710678+0.j-0.70710678-0.j][0.+0.70710678j0.-0.70710678j]]归一化右特征向量:[[0.70710678+0.j0.70710678-0.j][0.-0.70710678j0.+0.70710678j]]特征值:使中的值。scipy.linalg.eig(a,b=None,left=False,right=True,

overwrite_a=False,overwrite_b=False,check_finite=True,homogeneous_eigvals=False)调用格式:3.矩阵分解(1)矩阵的奇异值:模型:称为A的奇异值分解,式中U和V为正交矩阵,记,称为A的奇异值。scipy.linalg.svdvals(a,overwrite_a=False,check_finite=True)调用格式:3.矩阵分解运行结果代码

示例:计算矩阵的奇异值。矩阵m的奇异值为:[4.280915551.63516424]importnumpyasnp

fromscipy.linalgimportsvdvals

m=np.array([[1.0,0.0],

[2.0,3.0],

[1.0,1.0],

[0.0,2.0],

[1.0,0.0]])

print('矩阵m的奇异值为:',svdvals(m))3.矩阵分解(2)矩阵的QR分解:模型:,其中Q是正交矩阵,R为上三角矩阵。scipy.linalg.qr(a,overwrite_a=False,lwork=None,mode='full',pivoting=False,check_finite=True)调用格式:4.线性方程组求解求解线性方程组:模型:。scipy.linalg.solve(a,b,lower=False,overwrite_a=False,overwrite_b=False,check_finite=True,assume_a='gen',transposed=False)调用格式:4.线性方程组求解运行结果代码

示例:求解线性方程组,其中,。importnumpyasnp

a=np.array([[3,2,0],[1,-1,0],[0,5,1]])

b=np.array([2,4,-1])

fromscipyimportlinalg

x=linalg.solve(a,b)

print('求解x的结果:',x)

print('计算a@x==b:',np.dot(a,x)==b)求解x的结果:[2.-2.9.]

计算a@x==b:[TrueTrueTrue]模型:。5.特殊矩阵(1)创建块对角矩阵:模型:形如。调用格式:scipy.linalg.block_diag(*arrs)(2)创建伴随矩阵:调用格式:scipy.linalg.companion(a)谢谢THANKYOUSciPy聚类分析1.聚类分析算法简介2.scipy.cluster.vq3.scipy.cluster.hierarchy1.聚类分析算法简介聚类分析的直观理解物以类聚人以群分“智者观物,固非以一物视之,别之以类,格而致知,推而及其他者也。”1.聚类分析算法简介聚类功能由scipy.cluster提供包含两个子模块scipy.cluster.vpscipy.cluster.hierarchy2.scipy.cluster.vqscipy.cluster.vq模块支持向量优化和k-means算法算法原理:给一个含n个对象或元组的数据库,使用一个划分方法构建数据的K个划分,每个划分表示一个簇,K≤n,而且满足:(1)每个组至少包含一个对象。(2)每个对象属于且仅属于一个组。划分时要求同一个聚类中的对象尽可能地接近或相关,不同聚类中的对象尽可能地远离或不同。2.scipy.cluster.vqK-means算法:输入:簇的数目K和包含n个对象的数据库输出:K个簇,使平方误差最小方法:

(1)随机选择K个对象,每个对象代表一个簇的初始均值或中心;(2)对剩余的每个对象,根据它与簇均值的距离,将它指派到最相似的簇。(3)计算每个簇的均值。(4)回到步骤(2),循环,直到不再发生变化。2.scipy.cluster.vq

示例:使K-means算法模拟10个变量,2000个满足正态分布数据的结果展示图。3.scipy.cluster.hierarchyscipy.cluster.hierarchy模块提供了层次聚类。层次聚类:是按照某种方法进行层次分类,直到满足某种条件为止(1)凝聚:从下到上。首先将每个对象作为一个簇,然后合并这些原子簇为越来越大的

簇,直到所有的对象都在一个簇中,或者满足某个终结条件。(2)分裂:从上到下。首先将所有对象置于同一个簇中,然后逐渐细分为越来越小的簇,

直到每个对象自成一簇,或者达到了某个终止条件。算法原理:3.scipy.cluster.hierarchy层次聚类算法:输入:样本数据输出:层次聚类结果方法:

(1)将每个对象归为一类,共得到N类,每类仅包含一个对象。类与类之间

的距离就是它们所包含的对象之间的距离。(2)找到最接近的两个类并合并成一类,于是总的类数少了一个。(3)重新计算新的类与所有旧类之间的距离。(4)重复步骤(2)和步骤(3),直到最后合并成一个类为止。谢谢THANKYOUSciPy插值1.插值2.一维函数插值3.一维平滑样条插值1.插值插值是在离散数据的基础上补插连续函数,使得这条连续

曲线通过全部给定的离散据点。Scipy的插值功能由erpolate提供。主要介绍两种插值一维函数插值一维平滑样条插值classscipy.erp1d(x,y,kind='linear',axis=-1,copy=True,bounds_error=None,fill_value=nan,assume_sorted=False)2.一维函数插值模块调用:数学模型:已知未知函数在n+1个互不相同的观测点处的函数值:寻求一个近似函数(近似曲线),使之满足即求一条近似曲线,使其通过所有数据点。fromscipyimportinterpolate

importnumpyasnp

importmatplotlib.pyplotasplt

x=np.linspace(0,4,12)

y=np.cos(x**2/3+4)

print(x,y)

print('一维插值:构建插值函数')

f1=interpolate.interp1d(x,y,kind='linear')

print('linear:',f1)#线性插值对象

f2=interpolate.interp1d(x,y,kind='cubic')

print('cubic:',f2)#三次样条插值对象

xnew=np.linspace(0,4,30)

plt.plot(x,y,'o')

plt.plot(xnew,f1(xnew),'-')

plt.plot(xnew,f2(xnew),'--')

plt.legend(['data','linear','cubic'],loc='best')

plt.show()2.一维函数插值可视化结果代码

示例:使用interpld类对cos函数生成的数据进行插值。3.一维平滑样条插值模块调用:classscipy.interpolate.UnivariateSpline(x,y,w=None,bbox=[None,None],k=3,s=None,ext=0,check_finite=False)print('绘制散点图(红色)')

importnumpyasnp

importmatplotlib.pyplotasplt

x=np.linspace(-3,3,50)

y=np.exp(-x**2)+0.1*np.random.randn(50)

plt.scatter(x,y,c='r')

fromerpolateimportUnivariateSpline

print('平滑曲线1(绿色)')

spl=UnivariateSpline(x,y)

xs=np.linspace(-3,3,1000)

plt.plot(xs,spl(xs),'g',lw=3)

print('平滑曲线2(蓝色)')

spl.set_smoothing_factor(0.5)

plt.plot(xs,spl(xs),'b',lw=3)

plt.show()3.一维平滑样条插值可视化结果代码

示例:使用三次样条进行插值。谢谢THANKYOUSciPy数值优化1.优化问题2.最小二乘法和曲线拟合3.线性规划1.优化问题(1)数乘函数的优化数学模型:模块调用:功能描述:scipy.optimize.minimize_scalar(fun,bracket=None,bounds=None,args=(),method=None,tol=None,options=None)minimize

scalar函数用于计算一个变量的标量函数的局部最小化deff(x):

return(x-2)*x*(x+2)**2

fromscipy.optimizeimportminimize_scalar

res=minimize_scalar(f)

print(‘使用brent方法,目标函数的值:’,res.fun)

print(‘使用brent方法,优化的解决方案:’,res.x)

res=minimize_scalar(f,bounds=(-3,-1),method=‘bounded’)

print(‘使用bounded方法,目标函数的值:’,res.fun)

print(‘使用bounded方法,优化的解决方案:',res.x)1.优化问题运行结果代码

示例:最小化函数。使用brent方法,目标函数的值:-9.914949590828147使用brent方法,优化的解决方案:1.2807764040333458使用bounded方法,目标函数的值:3.2836517984978577e-13使用bounded方法,优化的解决方案:

-2.0000002025972391.优化问题(2)求解多目标优化问题的全局最优解数学模型:模块调用:功能描述:differential

evolution函数用于查找多变量函数的全局最小值。scipy.optimize.differential_evolution(func,bounds,args=(),strategy='best1bin',maxiter=1000,popsize=15,tol=0.01,mutation=(0.5,1),recombination=0.7,seed=None,callback=None,disp=False,polish=True,init='latinhypercube',atol=0,updating='immediate',workers=1,constraints=(),x0=None,*,integrality=None,vectorized=False)importnumpyasnp

fromscipy.optimizeimportrosen,differential_evolution

bounds=[(0,2),(0,2),(0,2),(0,2),(0,2)]

result=differential_evolution(rosen,bounds)

print('最小化Rosenbrock函数的求解结果:')

print(result.x,result.fun)

print('最小化Rosenbrock函数的求解结果(并行化):')

print(result.x,result.fun)

print('最小化Rosenbrock函数的求解结果(约束最小化):')

fromscipy.optimizeimportLinearConstraint,Bounds

lc=LinearConstraint([[1,1]],-np.inf,1.9)

bounds=Bounds([0.,0.],[2.,2.])

result=differential_evolution(rosen,bounds,constraints=lc,seed=1)

print(result.x,result.fun)1.优化问题运行结果代码

示例:最小化Rosenbrock函数。最小化Rosenbrock函数的求解结果:[1.1.1.1.1.]0.0最小化Rosenbrock函数的求解结果(并行化):[1.1.1.1.1.]0.0最小化Rosenbrock函数的求解结果(约束最小化):[0.966326220.93367155]0.00113524168530348232.最小二乘法和曲线拟合(1)最小二乘拟合模块调用:功能描述:least

squares函数求解变量满足有界的条件下的非线性最小二乘问题。scipy.optimize.least_squares(fun,x0,jac='2-point',bounds=(-inf,inf),method='trf',ftol=1e-08,xtol=1e-08,gtol=1e-08,x_scale=1.0,loss='linear',f_scale=1.0,diff_step=None,tr_solver=None,tr_options={},jac_sparsity=None,max_nfev=None,verbose=0,args=(),kwargs={})2.最小二乘法和曲线拟合(2)非线性曲线拟合curve_fit模块调用:功能描述:scipy.optimize模块中的函数curve_fit,least_squares,leastsq都可以实现非线性拟合。scipy.optimize.curve_fit(f,xdata,ydata,p0=None,sigma=None,absolute_sigma=False,check_finite=None,bounds=(-inf,inf),method=None,jac=None,*,full_output=False,nan_policy=None,**kwargs)2.最小二乘法和曲线拟合

示例:curve_fit函数拟合函数效果图。3.线性规划数学模型:模块调用:scipy.optimize.milp(c,*,integrality=None,bounds=None,constraints=None,options=None)谢谢THANKYOUSciPy统计函数1.scipy.stats模块简介2.汇总统计3.相关性检验4.样本检验

温馨提示

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

评论

0/150

提交评论