1. 前言
在进行机器学习时,经常用到两个库,numpy和matplotlib。
numpy(Numerical Python extensions)是一个第三方的Python包,用于科学计算。这个库的前身是1995年就开始开发的一个用于数组运算的库。经过了长时间的发展,基本上成了绝大部分Python科学计算的基础包,当然也包括所有提供Python接口的深度学习框架。
Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型地2D图表和一些基本的3D图表。Matplotlib最早是为了可视化癫痫病人的脑皮层电图相关的信号而研发,因为在函数的设计上参考了MATLAB,所以叫做Matplotlib。
2. 准备
1 | pip install numpy |
3. numpy
3.1. 基本类型(array)
1 | import numpy as np |
3.2. array相关操作
1 | import numpy as np |
3.3. 数学运算
1 | import numpy as np |
3.4. 对位运算
1 | import numpy as np |
3.5. 线性代数模块(linalg)
在深度学习相关的数据处理和运算中,线性代数模块(linalg)是最常用的之一。结合numpy提供的基本函数,可以对向量,矩阵,或是说多维张量进行一些基本的运算。
1 | import numpy as np |
3.6. 随机模块(random)
随机模块包含了随机数产生和统计分布相关的基本函数,Python本身也有随机模块random,不过功能更丰富。
1 | import numpy as np |
4. Matplotlib
4.1. 2D图表
Matplotlib中最基础的模块是pyplot。先从最简单的点图和线图开始,比如我们有一组数据,还有一个拟合模型,通过下面的代码图来可视化:
1 | import numpy as np |
4.2. 对比图表
点和线图表只是最基本的用法,有的时候我们获取了分组数据要做对比,柱状或饼状类型的图或许更合适。
1 | import numpy as np |
在Matplotlib中,画图时有两个常用概念,一个是平时画图蹦出的一个窗口,这叫一个figure。Figure相当于一个大的画布,在每个figure中,又可以存在多个子图,这种子图叫做axes。顾名思义,有了横纵轴就是一幅简单的图表。在上面代码中,先把figure定义成了一个一行两列的大画布,然后通过fig.add_subplot()加入两个新的子图。subplot的定义格式很有趣,数字的前两位分别定义行数和列数,最后一位定义新加入子图的所处顺序,当然想写明确些也没问题,用逗号分开即可。
4.3. 3D图表
Matplotlib中也能支持一些基础的3D图表,比如曲面图,散点图和柱状图。这些3D图表需要使用mpl_toolkits模块。
1、访问 Unofficial Windows Binaries for Python Extension Packages,下载两个文件:
- pyproj-1.9.5.1-cp36-cp36m-win_amd64.whl
- basemap-1.1.0-cp36-cp36m-win_amd64.whl
2、假设下载到了D盘下,那么在D盘下打开命令行,执行
1 | pip install pyproj-1.9.5.1-cp36-cp36m-win_amd64.whl |
ps:相关pip命令pip list
,查看安装列表pip uninstall package_name
,删除包
3、示例代码
1 | import matplotlib.pyplot as plt |
4.4. 3D散点图
3D的散点图也是常常用来查看空间样本分布的一种手段,并且画起来比表面图和网线图更加简单。
1 | import matplotlib.pyplot as plt |
4.5. 图像显示
Matplotlib也支持图像的存取和显示,并且和OpenCV一类的接口比起来,对于一般的二维矩阵的可视化要方便很多。
1 | import matplotlib.pyplot as plt |
这段代码中第一个例子是读取一个本地图片并显示,第二个例子中直接把上小节中反傅里叶变换生成的矩阵作为图像拿过来,原图和经过乘以3再加4变换的图直接绘制了两个形状一样,但是值的范围不一样的图案。显示的时候imshow会自动进行归一化,把最亮的值显示为纯白,最暗的值显示为纯黑。这是一种非常方便的设定,尤其是查看深度学习中某个卷积层的响应图时。
5. 源码分享
https://github.com/voidking/udacity-python/tree/master/numpy
https://github.com/voidking/udacity-python/tree/master/matplotlib
6. 书签
给深度学习入门者的Python快速教程 - 基础篇
给深度学习入门者的Python快速教程 - numpy和Matplotlib篇
机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用