python中的广播原则:
如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为他们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。
按照我的理解,当一个数组的形状和另一个数组是“相似”的时候,运算可以进行。我把相似这么理解:指的是保持形状不变的情况下,两个数组的同边相等,例如一个2维的43的数组和一个1维的13是可以进行运算的:
t1 = np.arange(12).reshape(4,3)
结果:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
t2 = np.arange(3)
array([0, 1, 2])
t1-t2
array([[0, 0, 0],
[3, 3, 3],
[6, 6, 6],
[9, 9, 9]])
但是一个2维的4x3的数组和一个1维的1x4是无法运算的,因为前者是4行3列,后者是1行4列,如果要运算就要把后者转置变成4行1列,“单位”相同才能进行运算,所以同边的意思是这样的。
为了以后更方便自己记住这个知识点,可以采用shape函数来观察数组的形状,例如shape(3,3,2)的数组和shape(3,2)的是可以进行运算的,但是shape(3,3,3)和shape(3,2)是不能进行运算的,因为从后往前算有相同的轴长(3,2),而后者没有。