Python广告数据挖掘与分析实战
上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广播机制确实非常好用,特别是在进行批量矩阵运算时,能极大地提升运算的效率。