上QQ阅读APP看书,第一时间看更新
3.1.5 广播
前面我们在介绍两个矩阵相乘时,要求前一个矩阵的列数与后一个矩阵的行数相等。但事实上,如果两个矩阵不满足此要求,还可以通过广播(broadcasting)来对它们进行乘法运算。Python的广播机制应用也非常广泛,它最主要的一个优点是,在进行按位运算时可以极大地减少代码量,提升运算速度。简单来说,广播可以这样理解:假设现在有一个m×n的矩阵a,让它加减乘除一个1×n的矩阵b,那么矩阵b会先被复制m次,最终得到一个与a相同大小的m×n的矩阵c,然后再将矩阵a与矩阵c按逐个元素进行加减乘除操作得到最终结果。同样,这种操作对m×1的矩阵也成立。广播的具体运算机制如图3-1所示。
图3-1 广播的具体运算机制示意图
注:以上运算均为两个矩阵之间的按位运算。
简单的代码示例如下所示:
In [121]: a = np.matrix([1,2,3]) In [122]: result = a + 100 In [123]: result Out[123]: matrix([[101, 102, 103]])
正常可能是a+[100,100,100]才能得到以上结果,但现在有了广播机制就不需要那么麻烦了。
In [124]: b = np.matrix([[1,2,3],[4,5,6]]) In [125]: result1 = b + [100, 200, 300] In [126]: result1 Out[126]: matrix([[101, 202, 303], [104, 205, 306]])
这样看来,Python中的NumPy广播机制确实非常好用,特别是在进行批量矩阵运算时,能极大地提升运算的效率。