numpy中数组的broadcasting特性说明

只为自己今后方便查找,记录一下~~~

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时会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值