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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了『Python』Numpy学习指南第十章_高端科学计算库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.ndimage n维图像包
scipy.odr 正交距离回归
scipy.optimize 优化
scipy.signal 信号处理
scipy.sparse 稀疏矩阵
scipy.spatial 空间数据结构和算法
scipy.special 任何特殊数学函数
scipy.stats 统计

 

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

1 import numpy as np
2 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 np
2 import matplotlib.pyplot as plt
3 from scipy import integrate,interpolate

积分:

一维积分尝试:

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

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

二维积分:

1 def half_circle(x):
2     return (1-x**2)**0.5
3 def half_sphere(x, y):
4     return (1-x**2-y**2)**0.5
5 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 plt
2 from mpl_toolkits.mplot3d import Axes3D
3 u = np.linspace(-1,1,100)
4 x,y = np.meshgrid(u,u)     # 网格坐标生成函数
5 z = np.abs((1-x**2-y**2))**0.5
6 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入门(系列完结)的主要内容,如果未能解决你的问题,请参考以下文章

流畅python学习笔记:第十章:序列的修改,散列和切片

Python学习_科学计算

python基础学习笔记——Python基础教程(第2版 修订版)第十章(充电时刻)

Numpy学习:《Python数据分析基础教程NumPy学习指南第2版》中文PDF+英文PDF+代码

numpy学习笔记

python能做啥科学计算