『Python』Numpy学习指南第十章_高端科学计算库scipy入门(系列完结),,简介:scipy包包


简介:

scipy包包含致力于科学计算中常见问题的各个工具箱。它的不同子模块相应于不同的应用。像插值,积分,优化,图像处理,,特殊函数等等。

scipy可以与其它标准科学计算程序库进行比较,比如GSL(GNU C或C++科学计算库),或者Matlab工具箱。scipy是Python中科学计算程序的核心包;它用于有效地计算numpy矩阵,来让numpy和scipy协同工作。

在实现一个程序之前,值得检查下所需的数据处理方式是否已经在scipy中存在了。作为非专业程序员,科学家总是喜欢重新发明造轮子,导致了充满漏洞的,未经优化的,很难分享和维护的代码。相反,Scipy程序经过优化和测试,因此应该尽可能使用。

模块:

scipy 由一些特定功能的子模块组成:

模块功能
scipy.cluster矢量量化 / K-均值
scipy.constants物理和数学常数
scipy.fftpack傅里叶变换
scipy.integrate积分程序
scipy.interpolate插值
scipy.io数据输入输出
scipy.linalg线性代数程序
scipy.ndimagen维图像包
scipy.odr正交距离回归
scipy.optimize优化
scipy.signal信号处理
scipy.sparse稀疏矩阵
scipy.spatial空间数据结构和算法
scipy.special任何特殊数学函数
scipy.stats统计

它们全依赖numpy,但是每个之间基本独立。导入Numpy和这些scipy模块的标准方式是:

1 import numpy as np2 from scipy import stats  # 其它子模块相同 

主scipy命名空间大多包含真正的numpy函数(尝试 scipy.cos 就是 np.cos)。这些仅仅是由于历史原因,通常没有理由在你的代码中使用import scipy。

【注】:import scipy as sp 后sp.子模块 会失败,所以建议采用上文的 from import 方法。

介绍几个函数:

由于scipy包过于完备复杂,并且暂时看来我的需求也并不是特别急迫,所以简单的介绍几个我感觉蛮有意思的函数部分,以后在sklearn的机器学习中还会继续打交道的,所以,sp,接下来还请多多指教。

导入积分包,插值包

1 import numpy as np2 import matplotlib.pyplot as plt3 from scipy import integrate,interpolate

积分:

一维积分尝试:

integrate.quad(lambda x:np.exp(-x**2),-10,10):原函数,下限,上限

1 ‘‘‘数值积分‘‘‘2 3 # 专用包sciyp.intergrate4 5 print(integrate.quad(lambda x:np.exp(-x**2),-10,10))

二维积分:

1 def half_circle(x):2     return (1-x**2)**0.53 def half_sphere(x, y):4     return (1-x**2-y**2)**0.55 res = integrate.dblquad(half_sphere, -1, 1,  # 原函数,x下限,y下限6         lambda x:-half_circle(x),            # y积分区域下限7         lambda x:half_circle(x))             # y积分区域上限8 print(res[0])

尝试绘张图:

1 import matplotlib.pyplot as plt2 from mpl_toolkits.mplot3d import Axes3D3 u = np.linspace(-1,1,100)4 x,y = np.meshgrid(u,u)     # 网格坐标生成函数5 z = np.abs((1-x**2-y**2))**0.56 fig = plt.figure()7 ax = Axes3D(fig)8 ax.plot_surface(x,y,z,rstride=4,cstride=4,cmap=‘rainbow‘)9 plt.show()

技术分享

插值:

interpolate.interp1d(x,signal)

interpolate.interp1d(x,signal,kind=‘cubic‘)

 1 ‘‘‘插值‘‘‘ 2  3 # 创建信号 4 x = np.linspace(-18,18,36) 5 noise = 0.1*np.random.random(len(x)) 6 signal = np.sinc(x) + noise 7  8 # 生成一次插值函数 9 interpreted = interpolate.interp1d(x,signal) #<---------10 x2 = np.linspace(-18,18,180)11 y = interpreted(x2)12 13 # 生成三次插值函数14 cubic = interpolate.interp1d(x,signal,kind=‘cubic‘) #<---------15 y2 = cubic(x2)16 17 plt.plot(x,signal,marker=‘o‘,label=‘data‘)18 plt.plot(x2,y,linestyle=‘-‘,label=‘linear‘)19 plt.plot(x2,y2,‘-‘,lw=2,label=‘cubic‘)20 plt.legend()21 plt.show()

技术分享

小结:

对于本书(《NumPy学习指南》)的学习到此就告一段落了,由于numpy对于python的特殊地位,对于她的熟悉学习过程必然会伴随我剩余人生相当长的一部分,所以也没什么伤感的,只是新坑已经准备好了,准备继续大干一场。中二一次,在这用魔兽过往版本的一句转场结束系列:燃烧的远征仍将继续,而我们将踏着灰烬前行!

『Python』Numpy学习指南第十章_高端科学计算库scipy入门(系列完结)

评论关闭