第1章——python入门(Numpy、Matplotlib)
一,Numpy。Numpy的数组类(numpy.array)中提供了很多便捷的方法,在实现深度学习时,我们将使用这些方法
-
导入Numpy:import numpy as np(“将numpy作为np导入”,需要事先安装好numpy包)
-
生成Numpy数组
要生成Numpy数组,需要使用np.array()方法。np.array()接收Python列表作为参数,生成Numpy数组(numpy.ndarray)
-
Numpy的算术运算
import numpy as np # numpy的部分用法演示 A = np.array([1.0, 2.0, 3.0]) B = np.array([2.0, 4.0, 6.0]) print(A + B) print(A - B) # 这里的运算规则与线性代数中的矩阵乘法不同,这里是对应位置元素的运算。需要保证x和y中的元素个数相同,否则会报错 print(A * B) print(A / B) A = np.array([[1, 2], [3, 4], [5, 6]]) B = np.array([[1, 2, 3], [4, 5, 6]]) # 在numpy中,使用*运算符执行的是元素级别的乘法,而不是矩阵乘法。因此,当尝试执行A*B时,由于数组A和B的形状不符合广播规则,会导致无法正常运行 # print(A * B) # 要执行矩阵乘法,可以使用np.dot函数或@运算符 print(np.dot(A, B), end="\n\n") print(A @ B, end="\n\n")
补充:矩阵的运算:
(1)加减运算要求同型矩阵(拥有相同的行数和列数)
(2)矩阵乘以或者除以一个常数,表示矩阵中所有的元素乘以或者除以这个常数
(3)矩阵A乘以矩阵B,需要满足A的列数等于B的行数,否则无意义。
(4)各种运算律:
①矩阵乘法运算一般不满足交换律,比如AB≠BA
②不满足消去律,如AB=AC且A≠0,不能得到B=C
③AB=0不能得到A=0或B=0
④满足结合律,如ABC=(AB)C=A(BC)
⑤满足分配率,如A(B+C)=AB+AC,(A+B)C=AC+BC
(5)方阵的乘幂,如A²=A×A(要求A的行数和列数相同,即A为方阵)
(6)转置:在矩阵右上角写大写的T表示转置,矩阵的第n行变为第n列
(7)转置的一些性质:
①矩阵连续转置两次等于它本身
②(A+B)的转置=A的转置+B的转置
③kA的转置等于k倍的A的转置
④AB的转置=B的转置乘以A的转置
⑤如果A=A的转置,则称A为对称矩阵(如对角矩阵)
-
Numpy的N维数组
Numpy不仅可以生成一维数组,也可以生成多维数组,比如:
print(A) print(A.shape) print(A.dtype, end="\n\n")
数学上一般将一维数组称为向量,将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统称为张量(tensor)
-
广播
Numpy中,形状不同的数组之间也可以进行运算。如之前的2×2的矩阵A乘以标量10,可以看做标量10被扩展成了2×2的形状,然后再与矩阵A进行乘法运算,这个巧妙的功能称为广播。综上,因为Numpy有广播功能,所以不同形状的数组之间也可以顺利地进行运算
-
访问元素
元素的索引从0开始,可以通过索引进行访问,也可以使用for语句访问各个元素。Numpy还可以使用数组访问各个元素。如:
print(A[0]) print(A[0][1]) for i in A: print(i) # 将A转化为一维数组 C = A.flatten() print(C, end="\n\n") print(C[np.array([0, 2, 4])], end="\n\n") # 获取满足一定条件的元素 print(C > 3) print(C[C > 3])
二,Matplotlib。在深度学习的实验中,图形的绘制和数据的可视化非常重要。Matplotlib是用于绘制图形的库,使用Matplotlib可以轻松地绘制图形和实现数据的可视化。
-
绘制简单图形。可以使用Matplotlib的pyplot模块绘制图形。如绘制sin函数曲线:
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()
-
pyplot的功能
在刚才的sin函数图像中,尝试追加cos函数的图形,并尝试使用pyplot的添加标题和x轴标签名等其他功能
# matplotlib的部分用法演示 # 生成数据 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, label="cos", linestyle="--") # 用虚线绘制 plt.xlabel("x") # x轴标签 plt.ylabel("y") # y轴标签 plt.title('sin & cos') # 标题 plt.legend() # 显示图例 plt.show()
-
显示图像
pyplot中还提供了用于显示图像的方法imshow()。另外,可以使用matplotlib.image模块的imread()方法读入图像
from matplotlib.image import imread img = imread('D:/Users/YHW/Desktop/需求层次.jpg') plt.imshow(img) plt.show()