NumPy 广播(Broadcast):
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。
维度数与维度的大小
若np.ones((1,2,3)),则维度数为3,第1个维度的大小为1,第二个维度的大小为2,第三个维度的大小为3
一丶维数数量相同
如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组 对应位相乘。这要求维数相同,且从后往前看各维度的大小相同。
特例:若维数相同,对应位置的维数大小不同,但对应维数的大小为1,则可计算.如:np.ones((2,2,3))和np.ones((1,2,1))可计算,再如:np.ones((10,1))和np.ones((1,10)),但np.ones((2,2,3))和np.ones((1,2,2))不可计算,即使第一维为1,但第三维不相同.
①维数数量相同,且维数对应位置的大小也相同
import numpy as np
a = np.array([1,2,3,4])
b = np.array([10,20,30,40])
print(a.shape,'\n',b.shape)
print (a * b )
输出结果:
②维数数量相同,维数大小不相同,但对应位置维度大小为1:
import numpy as np
a = np.arange(8).reshape(2,2,2)
b = np.arange(2).reshape(1,2,1)
print(a.shape,'\n',b.shape)
print(a + b,(a+b).shape)
输出结果:
③维数数量相同,但维数大小不相同,且对应位置维度大小不为1:
import numpy as np
a = np.array([[[ 0, 0, 0],
[10,10,10],
[20,20,20],
[30,30,30]]])
b = np.array([[[1,2,3,4,5]],
[[1,2,3,4,5]],
[[1,2,3,4,5]],
[[1,2,3,4,5]]])
print(a.shape,'\n',b.shape)
print(a + b,(a+b).shape)
输出结果:(因第一维大小和第三维大小不相同)
二丶维数数量不相同
当运算中的 2 个数组的形状不同时,当满足以下条件时,numpy 将自动触发广播机制。
1.如果维度个数不同,但从后往前其中一个维度包含另一个维度大小。如:np.ones((2,2,3))和np.ones((2,3))可进行广播.
import numpy as np
a = np.ones((2,2,3))
b = np.ones((2,3))
print(a,'\n',b)
print(a.shape,'\n',b.shape)
print(a+b,(a+b).shape)
输出结果:
1.如果维度个数不同,从后往前其中一个维度大小为1,其余维度大小相同,可广播。如:np.ones((2,2,3))和np.ones((2,1))可进行广播.
import numpy as np
a = np.ones((2,2,3))
b = np.ones((2,1))
print(a,'\n',b)
print(a.shape,'\n',b.shape)
print(a+b,(a+b).shape)
输出结果: