快学numpy03

来源:互联网 发布:阿里云rds数据库集群 编辑:程序博客网 时间:2024/06/06 03:25

博客地址:http://www.fanlegefan.com

文章地址:http://www.fanlegefan.com/archives/quicknumpy03/


broadcasting

执行 broadcast 的前提在于,两个 ndarray 执行的是 element-wise(按位加,按位减) 的运算,而不是矩阵乘法的运算,矩阵乘法运算时需要维度之间严格匹配,当两个array进行broadcasting操作时,numpy首先会比较他们的shape,在以下两种情况下,broadcasting才是合法的

1.两个array具有相同的shape

2.其中的一个array的shape为1,(进而可进行拷贝拓展已至,shape匹配)

比如:

Image (3d array):  256 x 256 x 3Scale (1d array):              3Result (3d array): 256 x 256 x 3A      (4d array):  8 x 1 x 6 x 1B      (3d array):      7 x 1 x 5Result (4d array):  8 x 7 x 6 x 5A      (2d array):  5 x 4B      (1d array):      1Result (2d array):  5 x 4A      (2d array):  15 x 3 x 5B      (1d array):  15 x 1 x 5Result (2d array):  15 x 3 x 5

栗子:

v = np.array([1,2,3])w = np.array([4,5])print(v.shape, w.shape)v = v.reshape(3,1)print(v.shape)print v+wa = np.arange(70).reshape(7,1,5,2)b = np.arange(20).reshape(4,5,1)# print a+ba = np.arange(630).reshape(7,1,5,2,9)b = np.arange(20).reshape(4,5,1,1)# print a+b# print b+ax = np.array([[1,2,3], [4,5,6]])v = np.array([1,2,3])print x + vx = np.array([[1,2,3], [4,5,6]]) # (2,3)w = np.array([4,5]).reshape(2,1) # (2,)print x+wprint np.array([4,5]).shape

原理图如下
image

总结下:如何判断两个数组a,b是否能够进行相加,a.shape(7,1,5,2,9),b.shape (4,5,1,1),让两个数组shape右对齐,逐个比对shape tuple里面的值,如果不等则必须有一个是1,否则不能够相加