更多关于:NumPy…
可是大家又会发现,如果让一个数组加1的话,结果时整个数组的结果都会加1,这是什么情况呢?
››› x = np.arange(3) ››› x array([0, 1, 2]) ››› x + 1 array([1, 2, 3])
其实这就是广播机制:Numpy 可以转换这些形状不同的数组,使它们都具有相同的大小,然后再对它们进行运算。给出广播示意图:

numpy 广播示意图
广播示例
接下来我们通过实际代码验证下:
››› a = np.arange(0, 40, 10) ››› a.shape (4L,) ››› a array([ 0, 10, 20, 30]) ››› b = np.array([0, 1, 2]) ››› b.shape (3L,) ››› b array([0, 1, 2]) ››› a = a[:, np.newaxis] # 转换a的维度(形状) ››› a.shape (4L, 1L) ››› a array([[ 0], [10], [20], [30]]) ››› a + b array([[ 0, 1, 2], [10, 11, 12], [20, 21, 22], [30, 31, 32]])
明显可以看出,相加前 a 的形状为 (4, 1), b 的形状为 (3, ), a+b 的结果的形状为(4, 3)。
计算时,变换结果与上图类似,这里来详细介绍下:
››› a array([[ 0], [10], [20], [30]]) ››› a2 = np.array(([ i * 3 for i in a.tolist()])) # 会先将a转为a2 ››› a2 array([[ 0, 0, 0], [10, 10, 10], [20, 20, 20], [30, 30, 30]]) ››› b array([0, 1, 2]) ››› b2 = np.array([b.tolist()] * 4) # 再将b转为b2 ››› b2 array([[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]) ››› a2 + b2 # a2 + b2的结果就是 a + b 的结果 array([[ 0, 1, 2], [10, 11, 12], [20, 21, 22], [30, 31, 32]])