2.2 广播机制
🚩所谓广播,就是对原本数据的不断复制,复制到和目标数组相同的构造的时候,比如我们有一个三行四列的数组,要加一行四列的数组,那么一行四列的数组就会自己复制三份,变成三行四列的数组,其中每一行都和原本数组的值相同,变成这种形式之后,再和原三行四列的数组进行相加运算,下面,我们从三个方面进行代码演示:一维数组的广播,二维数组的广播,三维数组的广播。
2.2.1 一维数组的广播
arr1 = np.random.randint(0, 10, size = (5, 3)) arr2 = np.arange(1, 4) display(arr1, arr2) # arr1 有五行,arr2 只有一行 # 它们俩的相加就是通过广播机制 # 广播机制:arr2 变身,变成了五份(一模一样) # 每一份对应每一行的相加 arr1 + arr2
2.2.2 二维数组的广播
arr3 = np.random.randint(0, 10, size = (4, 5)) # 计算每一行的平均值 arr4 = arr3.mean(axis = 1) display(arr3, arr4) # 注意 arr3 每一行5个数,arr4一行中为4个数 arr3 - arr4 # 形状不匹配,所以报错
因为形状不匹配的原因,故会报错,我们可以使用 2.1.1 数组变形 中的 reshape() 方法,对数组进行更改:
arr3 = np.random.randint(0, 10, size = (4, 5)) # 计算每一行的平均值 arr4 = arr3.mean(axis = 1) display(arr3, arr4) # 形状改变,arr4改为了四行一列 display(arr4.reshape(4, 1)) # arr3为四行五列 arr3 - arr4.reshape(4, 1)
2.2.3 三维数组的广播
import numpy as np arr1 = np.array([0,1,2,3,4,5,6,7]*3).reshape(3,4,2) #shape(3,4,2) arr2 = np.array([0,1,2,3,4,5,6,7]).reshape(4,2) #shape(4,2) print('三维数组:') display(arr1) print('二维数组:') display(arr2) arr3 = arr1 + arr2 # arr2数组在0维上复制3份 shape(3,4,2) arr3