法则:
-
法则一:
若多个数组的维度(或叫轴)的数量ndim不同,对ndim少的数组,从后向前使用“1”来扩展,直到所有数组的ndim相同。
-
法则二:
此时(所有数组的ndim已经相同)判断能否广播,若存在两数组的shape中某一对应位置都不包含1且不相等,则不能广播抛出ValueError;否则可以广播,将“1”改为对应维度大小的最大值,最终所有数组的shape都相同。
举例:
-
例一
a = np.array([[1, 2, 3], [4, 5, 6]])
a.shape=(2,3)
b = np.array([4, 5, 6])
b.shape=(3, )
c = np.array(2)
c.shape=()
a * b + c,
由法则一:b.shape改为(1, 3),c.shape改为(1, 1)
由法则二:首先判断得出可以广播,然后将b.shape索引为0元素的改为最大值2(max{a.shape[0], b.shape[0], c.shape[0]}
),此时b的元素在逻辑上进行复制,即b.shape为(2, 3)。同样,将c.shape改为(2, 3)。 -
例二
a = np.array([[1, 2, 3], [4, 5, 6]])
a.shape=(2,3)
b = np.array([4, 5])
b.shape=(2, )
由法则一:b.shape改为(1, 2)
由法则二:a.shape[0]和b.shape[0]满足,但a.shape[1]和b.shape[1]不满足,不能广播。