1.3 NumPy的算术运算

机器学习和深度学习中涉及大量的数组或矩阵运算,本节我们将重点介绍两种常用的运算。一种是对应元素相乘,又称为逐元乘法,运算符为np.multiply()或*。另一种是点积或内积运算,运算符为np.dot()。

1.3.1 对应元素相乘

对应元素相乘是计算两个矩阵中对应元素的乘积。np.multiply函数用于数组或矩阵对应元素相乘,输出与相乘数组或矩阵的大小一致,格式如下:

其中x1、x2之间的对应元素相乘遵守广播规则,NumPy的广播规则将在1.6节介绍。下面我们通过一些示例来进一步说明。

矩阵AB的对应元素相乘,可以直观地用图1-5表示。

NumPy数组不仅可以与数组进行对应元素相乘,还可以与单一数值(或称为标量)进行运算。运算时,NumPy数组的每个元素与标量进行运算,其间会用到广播机制。例如:

图1-5 对应元素相乘示意图

运行结果如下:

由此可见,数组通过一些激活函数的运算后,输出与输入形状一致。

运行结果如下:

1.3.2 点积运算

点积运算又称为内积,在NumPy中用np.dot表示,其一般格式为:

以下通过一个示例来说明点积运算的具体使用方法及注意事项。

运行结果如下:

以上运算可以用图1-6表示。

如图1-6所示,矩阵X1与矩阵X2进行点积运算,其中X1和X2对应维度(即X1的第2个维度与X2的第1个维度)的元素个数必须保持一致。此外,矩阵X3的形状是由矩阵X1的行数与矩阵X2的列数确定的。

图1-6 矩阵的点积运算示意图,对应维度的元素个数需要保持一致

点积运算在神经网络中的使用非常频繁,如图1-7所示的神经网络,其输入I与权重矩阵W之间的运算就是点积运算。

图1-7 点积运算可视化示意图