Numpy 里面比较重要的概念广播, 意思是将比较小的数组内容,广播到比较大的数组中,产生相互兼容的尺寸形状,Numpy 的广播实际使用 C语言操作,可以有效的运用记忆和运算,进一步提高程序运行的效率,下面介绍 Numpy 广播的用法。
广播单一数字
如果是单一个数字,只要单纯的通过数学运算算式,就能广播为同样大小的数组,其运作的原理是将原来数组的所有元素,根据数学运算算式加减乘除广播的数字,产生新的数组。
import numpy as np
a = np.array([1,2,3,4]) # 1x4 数组
b = 2 # 广播单一数字2 2
print(a+b) # [3 4 5 6]
print(a-b) # [-1 0 1 2]
print(a*b) # [2 4 6 8]
print(a%b) # [1 0 1 0]
c = np.array([[1,2,3],[4,5,6]]) # 2x3 数组
print(c+b) # [[3 4 5] [6 7 8]]
print(c-b) # [[-1 0 1] [ 2 3 4]]
print(c*b) # [[ 2 4 6] [ 8 10 12]]
print(c%b) # [[1 0 1] [0 1 0]]
广播数组
如果将某个数组广播到另外一个数组,同样能通过数学运算进行计算后广播,但是必须在同一个维度上的数量必须相等或者等于 1,不然广播的时候会发生错误。
import numpy as np
a = np.array([[1,1,1],[2,2,2]]) # 2x3
b = np.array([1,2,3]) # 1x3
print(a+b) # [[2 3 4] [3 4 5]]
print(a-b) # [[ 0 -1 -2] [ 1 0 -1]]
print(a*b) # [[1 2 3] [2 4 6]]
print(a%b) # [[0 1 1] [0 0 2]]
c = np.array([[1,1,1],[2,2,2],[3,3,3]]) # 3x3
d = np.array([[1],[2],[3]]) # 3x1
print(c+d) # [[2 2 2] [4 4 4] [6 6 6]]
print(c-d) # [[0 0 0] [0 0 0] [0 0 0]]
print(c*d) # [[1 1 1] [4 4 4] [9 9 9]]
print(c%d) # [[0 0 0] [0 0 0] [0 0 0]]
如果是同样形状的数组,广播就是将相同位置的元素,相互进行数学计算,就能得到最终结果
import numpy as np
a = np.array([[1,1,1],[2,2,2]]) # 2x3 数组
b = np.array([[3,3,3],[4,4,4]]) # 2x3 数组
print(a+b) # [[4 4 4] [6 6 6]]
print(a-b) # [[-2 -2 -2] [-2 -2 -2]]
print(a*b) # [[3 3 3] [8 8 8]]
print(a%b) # [[1 1 1] [2 2 2]]