NumPy
深度学习中经常出现数组和矩阵运算,NumPy的数组类中提供了很多便捷方法,对经常用的一些NumPy的相关操作所作的整理。
参考书籍:
深度学习入门 : 基于Python的理论与实现 / (日) 斋藤康毅著 ; 陆宇杰译. – 北京 : 人民邮电出版社, 2018.7(2019.5重印)
NumPy的导入
-
外部库的安装:
1.在命令行界面直接运行
pip install numpy
2.使用anaconda虚拟环境,使用conda命令
conda activate 虚拟环境路径地址 conda install numpy
-
库的导入
import numpy as np # 导入库的常用语句,导入NumPy库并重命名为np
NumPy一维数组(向量)基础操作
import numpy as np
"""NumPy一维数组相关运算"""
x = np.array([1.0, 2.0, 3.0]) # 生成numpy数组
y = np.array([2.0, 4.0, 6.0]) # 生成numpy数组
print(f"x:{x}")
print(f"y:{y}")
print(f"x + y = {x + y}") # 对应元素相加
print(f"x * y = {x * y}") # 对应元素相乘
print(f"x / y = {x / y}") # 对应元素相除
print(f"x / 2.0 = {x / 2.0}") # numpy数组的各个元素和标量之间进行运算(广播功能)
注意:
-
数组x和数组y之间的运算需要注意,两个数组的元素个数必须保持一致,个数不同会报错。
-
数组与单一的数值(标量)组合运算时,其底层原因是NumPy运算的
广播
功能。上面代码中数组与标量运算时,标量 2.0 2.0 2.0会被扩展成 1 × 3 1\times 3 1×3的向量。
NumPy的 N N N维数组(矩阵)基础运算
import numpy as np
"""NumPy的N维数组(矩阵)相关运算"""
x = np.array([[1, 2], [3, 4]]) # 创建一个二维数组,即2×2的矩阵x
y = np.array([[5, 6], [7, 8]])
print(f"x:\n{x}") # 打印输出x
print(f"y:\n{y}") # 打印输出y
print(x.shape) # 矩阵x的维数:2×2
print(x.dtype) # 矩阵x中元素的类型
print(f"x + y = \n{x + y}") # 对应元素相加
print(f"x * y = \n{x * y}") # 对应元素相乘
print(f"x * 10=\n{x * 10}") # x矩阵每个元素都乘10
注意:
- 上述NumPy的矩阵运算与线性代数中的矩阵运算方式不同,上述代码中矩阵乘法是对应元素相乘。
- 矩阵与标量的运算同样遵循广播规则。
广播
矩阵与标量10相乘时,标量10被扩展成了 2 × 2 2\times 2 2×2的形状,然后再与矩阵进行乘法运算,这个功能称为广播。(《深度学习入门:基于Python的理论与实现》P14,1.5.5节)
广播不止会应用在矩阵和标量的运算中,不同形状的数组之间也可以进行运算。
import numpy as np
x = np.array([[1, 2], [3, 4]])
y = np.array([10, 20])
print(f"x * y = \n{x * y}")
注意:
- 即使有广播功能,但是矩阵的列数应该保持一致,否则同样会报错。
Numpy矩阵元素的访问
NumPy矩阵的元素访问同数组一样,索引下标从0开始。
import numpy as np
"""NumPy矩阵元素的访问"""
x = np.array([[1, 2], [3, 4], [5, 6]])
print(f"x:\n{x}")
print(f"x[0]: {x[0]}") # x矩阵的第0行[1, 2]
print(f"x[0][1]: {x[0][1]}") # x矩阵的第0行下标索引为1的元素2
NumPy可以使用数组访问各个元素:
使用这种方式可以快速提取出数组中满足一定条件的元素
import numpy as np
"""NumPy矩阵元素的访问"""
x = np.array([[1, 2], [3, 4], [5, 6]])
print(f"x:\n{x}")
x = x.flatten() # 将x矩阵转换为一维数组(向量)
print(f"x:{x}")
print(f"{x[np.array([0, 1, 3])]}") # 使用数组访问x中索引为0, 1, 3的各个元素
print(f"{x[x>3]}") # 输出x中大于3的元素
注意:
- NumPy数组使用不等号运算符,结果会得到一个布尔型的数组,上面代码中最后一行原理就是根据这个布尔型数组,取出值大于3结果为True对应的元素。
参考书籍:
深度学习入门 : 基于Python的理论与实现 / (日) 斋藤康毅著 ; 陆宇杰译. – 北京 : 人民邮电出版社, 2018.7(2019.5重印)