Python数据预处理技术与实践
上QQ阅读APP看书,第一时间看更新

2.2 SciPy

SciPy是一个Python的常用科学计算工具包,本节主要介绍SciPy的安装和特点以及SciPy Linalg、SciPy文件操作、SciPy插值、SciPy Ndimage和SciPy算法优化等常用的内置模块(源代码见:Chapter2/ScipyDome.py)。

2.2.1 SciPy的安装和特点

SciPy官网(网址:https://www.scipy.org/)如图2-3所示,包含最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解等模块。

图2-3 SciPy官网

1. SciPy的安装

可使用以下3种方法安装SciPy:

方法一 Anaconda已经集成了SciPy,读者可使用命令conda list在DOS环境下查看。

方法二 可以通过pip命令自动安装,请执行如下命令:pip install scipy。

方法三 在GitHub上下载SciPy源码(网址:https://github.com/numpy/numpy),然后在源码根目录下执行如下命令:python setup.py install。

安装完成后,检测是否成功。首先打开Sublime,然后按F6键进入Python环境,最后输入import sicpy,得到如图2-4所示的状态即表示安装成功。

图2-4 验证SciPy是否成功安装

2. SciPy的特点

SciPy库依赖于NumPy,它提供了便捷且快速的N维数组操作。SciPy库与NumPy数组一起工作,并提供了许多用户友好和高效的实现方法,它们一起运行在所有流行的操作系统上,安装快速且免费。

SciPy提供了丰富的子模块,具体参见表2-5所示。

表2-5 SciPy的子模块

2.2.2 SciPy Linalg

SciPy Linalg模块包含线性代数函数,使用该模块可以计算逆矩阵、求特征值、解线性方程组以及求行列式等。

1. 求解线性方程组

我们使用Linalg求解如下方程组:

完整的代码实现如下:

代码说明:

数组a表示未知数的系数矩阵,数组b表示等号右边方程组值的矩阵。

运行结果:

     线性方程组的解是: [ 2. -2. 8.]
2. 求解行列式

运行结果:

     行列式的解是:14-23=-2.0
3. 求解特征值和特征向量

代码说明:

  • A表示方阵。
  • 特征值λ和相应的特征向量v的关系是:Av=λv。

运行结果:

     特征值:[-0.37228132+0.j 5.37228132+0.j]
     特征向量:[[-0.82456484 -0.41597356]   [ 0.56576746 -0.90937671]]
4. 奇异值分解(SVD)

代码说明:

  • 矩阵a分解为两个酉矩阵(U和Vh)和一个奇异值。
  • a=U*s*Vh。

运行结果:

2.2.3 SciPy文件操作

1. 保存MATLAB文件

运行结果:

2. 查看MATLAB文件变量

运行结果:

     [('vect', (1, 10), 'int32')]

2.2.4 SciPy插值

插值是在直线或曲线上的两点之间找到值的过程。插值不仅适用于统计学,而且在科学、商业和需要预测两个现有数据点之间的值时也很有用。

1. 绘制二维空间图

二维空间的余弦散列点运行结果如图2-5所示。

图2-5 绘制二维空间图

2. 一维插值

一种基于固定数据点来推导出函数的便捷方法,可以使用线性插值在给定数据定义域内的任意位置推导出该函数。

运行结果如图2-6所示。

图2-6 一维插值

3. 样条曲线

运行结果如图2-7所示。

图2-7 样条曲线插值

2.2.5 SciPy Ndimage

SciPy的ndimage子模块专用于图像处理,ndimage表示一个n维图像。

图像处理中一些最常见的任务如下:

  • 图像的输入、输出和显示。
  • 基本操作,如裁剪、翻转、旋转等。
  • 图像过滤,如去噪、锐化等。
  • 图像分割,如标记对应于不同对象的像素。
  • 分类。
  • 特征提取。
  • 注册。

下面使用SciPy实现其中的一些功能。

1. 打开图像

运行结果如图2-8所示。

图2-8 打开图像

2. 图像倒置

运行结果如图2-9所示。

图2-9 图像倒置

3. 按指定的角度旋转图像

运行结果如图2-10所示。

图2-10 旋转图像

4. 模糊图像

代码说明:

sigma值表示5级模糊程度。通过调整sigma值,可以看到图像质量的变化。

运行结果如图2-11所示。

图2-11 模糊图像

2.2.6 SciPy优化算法

1. 梯度下降优化算法

求解方程:x2-2x的最小值,求解代码如下:

运行结果如图2-12所示。

图2-12 函数最小值

通过可视化结果可以发现,最小值比0略小。下面是梯度下降的实现代码:

运行结果:

结果显示最优值为-1,也满足可视化的判断。关于梯度下降算法的理论知识,读者可参考相关资料。

2. 最小二乘法优化算法

运行结果:

     最小值是: = [1.0,1.0]

本节展示了SciPy在优化算法等领域的应用,有关具体理论知识,读者可以自行查找资料学习。