
3.4 深度学习的一些常备库
深度学习算法和人脑相似,人脑和深度学习模型都拥有大量的神经元,这些神经元在独立的情况下并不智能,但当它们相互作用时就会变得相当智能。深度学习主要由神经网络构成,该网络模拟了人脑中类似的网络。当数据穿过这个神经网络时,每一层都会处理这些数据,进行过滤和聚合,进行辨别、分类及识别等,并产生最终输出。
Python具有丰富的深度学习库,这些方便易用的库帮助了开发人员高效开发,主要包括以下几个方面。
(1)科学计算、数据分析、统计功能库,例如Numpy、Scipy、Pandas、StatsModels等。
(2)可视化输出库,例如Matplotlib、Seaborn、Plotly等。
(3)深度学习库,例如Sklearn、TensorFlow、PyTorch、Keras等。
(4)自然语言处理,例如NLTK、SpaCy、Gensim等。
3.4.1 NumPy——基础科学计算库
NumPy(Numerical Python)是Python语言的一个开源的数值计算扩展库,主要用来存储和处理大型矩阵,NumPy支持的数据类型比Python内置的类型要多很多,基本可以和C语言的数据类型对应上。目前NumPy已经成为其他大数据和机器学习模块的基础。NumPy主页:http://www.numpy.org/,如图3-15所示。

图3-15 NumPy主页
NumPy的主要功能如下。
(1)一个强大的数组对象。
(2)线性代数、傅里叶变换和随机数生成函数,例如最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解及其他科学与工程中常用计算。
(3)广播功能函数。
(4)集成C/C++/Fortran代码的工具。
NumPy的安装命令为pip install numpy,Anaconda环境中已经包含该库,NumPy的典型应用说明如下。
(1)创建一个全0矩阵或全1矩阵,代码如下。

输出结果如下。

(2)创建一个单位矩阵,代码如下。

输出结果如下。

(3)矩阵相乘,代码如下。

输出结果如下。

NumPy的矩阵乘法函数有两个:(1)np.matmul矩阵乘法,[a,b]*[b,c] = [a,c];(2)np.multiply对应位相乘,要求矩阵维度完全相同。
(4)快速傅里叶变化,代码如下。

输出结果如下。

3.4.2 SciPy——科学计算工具集
SciPy是易于使用的用于数学、科学、工程领域的开源Python工具包,包含插值处理、积分、优化、图像处理、常微分方程数值的求解、信号处理等功能,与Numpy协同工作可高效解决问题。SciPy主页:https://www.scipy.org/,如图3-16所示。

图3-16 SciPy主页
SciPy的常用子模块如表3-1所示。
表3-1 SciPy的常用子模块

SciPy的安装命令为pip install scipy,Anaconda环境中已经包含SciPy,SciPy的典型应用说明如下。
(1)求逆矩阵,代码如下。


输出结果如下。

(2)求均值和方差,代码如下。

stats包中有许多其他分布,比如正态分布(norm)、几何分布(geom)、泊松分布(poisson)等。
(3)快速傅里叶变换,代码如下。

3.4.3 Pandas——数据分析的利器
Pandas是Python的一个数据分析包,是基于NumPy的一种工具,用于完成数据分析任务。Pandas提供了高性能的数据分析工具,包含大量快速便捷地处理数据的函数和方法,它使Python成为强大而高效的数据分析环境。Pandas主页:http://pandas.pydata.org/,如图3-17所示。

图3-17 Pandas主页
Pandas有两种数据类型:Series与DataFrame。Series可以简单地理解为Excel中的行或者列,DataFrame可以理解为整个Excel表格,当然这只是形象的理解,实际上它们的功能要比Excel灵活。
(1)Series:一维的数据类型,其中每一个元素都有一个标签。
(2)DataFrame:二维的表结构。可以存储多种不同的数据类型。
(3)Panel:三维的数组,可以理解为DataFrame的容器。
Pandas的安装命令为pip install pandas,Anaconda环境中已经包含Pandas,Pandas的典型应用说明如下。
(1)读数据
Pandas可以读取CSV文件和EXCEL文件的数据,例如:

(2)对数据的统计特性进行描述
方法如下。

(3)Series
Pandas的Series是一维数据结构,类似于Python中的列表和Numpy中的数组,区别是Series是一维的,能存储不同类型的数据,有一组索引与元素对应。
Series可以通过列表、字典及嵌套等方法创建,例如:

输出结果如下。

Series可以通过索引访问,可以追加、删除其中的项。
(4)DataFrame
Pandas的DataFrame是一种表格型数据结构,含有一组有序的列,每列可以是不同的值。DataFrame既有行索引,也有列索引,可以看作是由Series组成的字典,不过这些Series共用一个索引。DataFrame的创建常采用两种方式:使用Dict进行创建以及读取CSV或者Excel文件来创建。
下面展示根据Dict构造DataFrame的方法,代码如下。

输出结果如下。

下面展示通过Excel文件创建DataFrame的方法,代码如下。。

输出结果如下。

DataFrame的行索引是index,列索引是columns,可以在创建DataFrame时指定索引的值。DataFrame可以根据列名来选取一列,返回一个Series,即切片。DataFrame的变量可以进行加、减、乘、除等运算。
3.4.4 Matplotlib——画出优美的图形
Matplotlib是Python的2D绘图库,可以在各种平台上以各种硬拷贝格式和交互式环境生成出高品质图形。Matplotlib可用于Python脚本、Python和IPython shell、Jupyter笔记本、Web应用程序服务器四个图形用户界面工具包。Matplotlib主页:https://matplotlib.org/,如图3-18所示。

图3-18 Matplotlib主页
Matplotlib的安装命令为pip install matplotlib,Anaconda环境中已经包含Matplotlib,其典型应用说明如下。
(1)绘制正弦曲线,代码如下。

输出结果如图3-19所示。

图3-19 绘制正弦曲线
(2)绘制两个子图,代码如下。

输出结果如图3-20所示。

图3-20 绘制两个子图
3.4.5 Tqdm——Python进度条库
Tqdm的实例代码如下。


输出结果如图3-21所示。

图3-21 Tqdm进度条