基于Python的理论与实现-1
前言:此笔记是基于斋藤康毅先生所著的《深度学习进阶:自然语言处理 》,希望能给各位带来些许思考和灵感,共勉。
第一章 Python相关知识
NumPy
在深度学习的实现中,经常出现数组和矩阵的计算。NumPy
的数组类(numpy.array)
中提供了很多便捷的方法。
导入NumPy
import numpy as np
Python 中使用import 语句来导入库。这里的import numpy as np
,直译的话就是“将numpy
作为np
导入”的意思。通过写成这样的形式,之后NumPy
相关的方法均可通过np来调用。
NumPy算术运算
1 | x = np.array([1.0, 2.0, 3.0]) |
当x和y的元素个数相同时,可以对各个元素进行算术运算。如果元素个数不同,程序就会报错,所以元素个数保持一致非常重要。
NumPy数组也可以和单一的数值(标量)组合起来进行运算。此时,需要在NumPy数组的各个元素和标量之间进行运算。这个功能也被称为广播
1 | x = np.array([1.0, 2.0, 3.0]) |
N维数组
1 | A = np.array([[1, 2], [3, 4]]) |
矩阵A的形状可以通过shape
查看,矩阵元素的数据类型可以通过dtype
查看。
NumPy 数组(np.array
)可以生成N维数组,即可以生成一维数组、二维数组、三维数组等任意维数的数组。数学上将一维数组称为向量,将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统称为张量(tensor)。本书基本上将二维数组称为“矩阵”,将三维数组及三维以上的数组称为“张量”或“多维数组”。
广播
NumPy中,形状不同的数组之间也可以进行运算。2×2 的矩阵A和标量10之间进行了乘法运算。在这个过程中,如下图 所示,标量10被扩展成了2 × 2 的形状,然后再与矩阵A进行乘法运算。这个巧妙的功能称为广播(broadcast)。
1 | A = np.array([[1, 2], [3, 4]]) |
因为NumPy有广播功能,所以不同形状的数组之间也可以顺利
地进行运算。
Matplotlib
Matplotlib是用于绘制图形的库,使用Matplotlib 可以轻松地绘制图形和实现数据的可视化。
绘制sin函数例子:
1 | import numpy as np |
这里使用NumPy的arange
方法生成了[0, 0.1, 0.2, ..., 5.8, 5.9]
的
数据,将其设为x。对x的各个元素,应用NumPy的sin 函数np.sin()
,将x、y的数据传给plt.plot
方法,然后绘制图形。最后,通过plt.show()
显示图形。运行上述代码后,就会显示如下图形:
pyplot功能
1 | import numpy as np |
结果如图所示:
显示图像
pyplot 中还提供了用于显示图像的方法imshow()
。另外,可以使用matplotlib.image
模块的imread()
方法读入图像。
1 | import matplotlib.pyplot as plt |