通俗易懂的解释numpy中的广播

广播是numpy对不同shape的array进行数值计算的方式,符合一定规则的前提下,将较小的array“广播”成更大的、可以计算的array。广播意味着一种向量化操作,从而在类似C语言中产生大量循环,这会导致内存和计算效率的低效。在Python中,广播不会做大量的数据复制并且通常使计算更加高效。

标准的数组计算形式为两个shape形状一样:

>>> a = np.array([1.0, 2.0, 3.0])
>>> b = np.array([2.0, 2.0, 2.0])
>>> a * b
array([ 2.,  4.,  6.])

如果shape不一致,需要满足一定规则,可以使用广播。

广播规则

网上很多文章的写法都是:

  1. 让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐
  2. 输出数组的shape是输入数组shape的各个轴上的最大值
  3. 如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错
  4. 当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值

我看的时候看了很久都没有看懂。其实可以更简单的描述:
对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:

  1. 当前维度的值相等
  2. 当前维度的值有一个是1

若条件不满足,抛出“ValueError: frames are not aligned”异常。
输出数组的维度是每一个维度的最大值,广播将值为1的维度进

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值