只为自己今后方便查找,记录一下~~~
numpy数组具有broadcast性质,但是究竟是怎么来判断两个数组是否可以通过该特性进行相加呢?
首先我们声明两个数组:a和b
执行a+b后,可以得到:
这里就用到broadcast特性,但怎么计算的,后边再讲。下边我们生成c和b,做c+b,看看得到什么呢?
那么此时b+c等于什么?
可以看到,报错了!
我们看到,上边的两个b是一模一样的,区别仅在于a和c。那这跟broadcast有什么关系呢
原因是,广播特性也是有原则的:如果两个数组的后缘维度(即:从末尾开始算起的维度)匹配,则认为它们是广播兼容的,广播会在缺失和(或)长度为1的轴上进行。维度匹配有两层含义:
- 维度相同
- 有一个的维度是1
匹配会从最后一维开始进行,直到某一个的维度全部匹配为止。
比如上边的第一个例子,a.shape=(4,1,2),b.shape=(3, 2),首先匹配a的最后一维2和b的最后一维2,2等于2,满足条件一(维度相同)。然后匹配a.shape中的1和b.shape中的3,满足条件二(有一个的维度是1),匹配。所以a+b可以正确计算。
第二个例子中,c.shape =(4,2,2),b.shape=(3, 2),2等于2,满足条件。但是2和3比较时,不满足维度匹配的两个含义,所以在做b+c时会报错。