前言:此笔记是基于斋藤康毅先生所著的《深度学习进阶:自然语言处理 》,希望能给各位带来些许思考和灵感,共勉。

第一章 Python相关知识

NumPy

在深度学习的实现中,经常出现数组和矩阵的计算。NumPy的数组类(numpy.array)中提供了很多便捷的方法。

导入NumPy

import numpy as np

Python 中使用import 语句来导入库。这里的import numpy as np,直译的话就是“将numpy作为np 导入”的意思。通过写成这样的形式,之后NumPy相关的方法均可通过np来调用。

NumPy算术运算

1
2
3
4
x = np.array([1.0, 2.0, 3.0])
y = np.array([2.0, 4.0, 6.0])
x + y # 对应元素的加法
array([ 3., 6., 9.])

当x和y的元素个数相同时,可以对各个元素进行算术运算。如果元素个数不同,程序就会报错,所以元素个数保持一致非常重要。

NumPy数组也可以和单一的数值(标量)组合起来进行运算。此时,需要在NumPy数组的各个元素和标量之间进行运算。这个功能也被称为广播

1
2
3
x = np.array([1.0, 2.0, 3.0])
x / 2.0
array([ 0.5, 1. , 1.5])

N维数组

1
2
3
4
5
6
A = np.array([[1, 2], [3, 4]])
print(A)
# [[1 2]
# [3 4]]
A.shape # (2, 2)
A.dtype # dtype('int64')

矩阵A的形状可以通过shape查看,矩阵元素的数据类型可以通过dtype查看。

NumPy 数组(np.array)可以生成N维数组,即可以生成一维数组、二维数组、三维数组等任意维数的数组。数学上将一维数组称为向量,将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统称为张量(tensor)。本书基本上将二维数组称为“矩阵”,将三维数组及三维以上的数组称为“张量”或“多维数组”

广播

NumPy中,形状不同的数组之间也可以进行运算。2×2 的矩阵A和标量10之间进行了乘法运算。在这个过程中,如下图 所示,标量10被扩展成了2 × 2 的形状,然后再与矩阵A进行乘法运算。这个巧妙的功能称为广播(broadcast)

image-20230218001314273

1
2
3
4
5
A = np.array([[1, 2], [3, 4]])
B = np.array([10, 20])
A * B
# array([[ 10, 40],
# [ 30, 80]])

因为NumPy有广播功能,所以不同形状的数组之间也可以顺利
地进行运算。

image-20230218001458634

Matplotlib

Matplotlib是用于绘制图形的库,使用Matplotlib 可以轻松地绘制图形和实现数据的可视化。

绘制sin函数例子:

1
2
3
4
5
6
7
8
import numpy as np
import matplotlib.pyplot as plt
# 生成数据
x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0到6的数据
y = np.sin(x)
# 绘制图形
plt.plot(x, y)
plt.show()

这里使用NumPy的arange方法生成了[0, 0.1, 0.2, ..., 5.8, 5.9]
数据,将其设为x。对x的各个元素,应用NumPy的sin 函数np.sin(),将x、y的数据传给plt.plot方法,然后绘制图形。最后,通过plt.show()显示图形。运行上述代码后,就会显示如下图形:

image-20230218001843572

pyplot功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np
import matplotlib.pyplot as plt
# 生成数据
x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0到6的数据
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制图形
plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle = "--", label="cos") # 用虚线绘制
plt.xlabel("x") # x轴标签
plt.ylabel("y") # y轴标签
plt.title('sin & cos') # 标题
plt.legend()
plt.show()

结果如图所示:

image-20230218002250595

显示图像

pyplot 中还提供了用于显示图像的方法imshow()。另外,可以使用matplotlib.image模块的imread()方法读入图像。

1
2
3
4
5
import matplotlib.pyplot as plt
from matplotlib.image import imread
img = imread('lena.png') # 读入图像(设定合适的路径!)
plt.imshow(img)
plt.show()