Broadcast: Numpy中的广播机制

在numpy中,当不同形状的数组进行算术运算时,会使用广播机制将小数组扩展到与大数组匹配的形状。这个过程涉及形状判断、扩展和对应元素计算。广播有特定的规则,例如所有轴的尺寸要么相等要么为1,且至少有一轴尺寸相同。通过广播,可以简化代码并提高运算效率,但不兼容的形状会导致错误。本文通过实例深入解析了广播的概念和应用。
摘要由CSDN通过智能技术生成

欢迎关注”生信修炼手册”!

在numpy中,针对两个不同形状的数组进行对应项的加,减,乘,除运算时,会首先尝试采用一种称之为广播的机制,将数组调整为统一的形状,然后再进行运算。先来看一个最基本的广播的例子

>>> import numpy as np
>>> a = np.array([1, 2, 3])
>>> b = 2
>>> a * b
array([2, 4, 6])

上述代码进行矩阵加法运算,numpy在处理时,首先将数组b延伸成为和数组a长度相同的一个数组,示意如下

然后再对应元素相加,从而实现加法运算。这种将较小数组进行延伸,保持和较大数组同一形状的机制,就称之为广播。

数组的广播是有条件约束的,并不是任意两个不同形状的数组都可以调整成同一形状,其操作逻辑如下

  1. 第一步,判断输出结果的数组尺寸,即shape属性,取输入数组的每个轴的最大值

  2. 第二步,将shape属性与输出数组不一致的话输入数组进行广播,要求二者之间只可以有一个轴尺寸是不同的,而且必须是1

  3. 第三步,利用广播之后的数组进行对应项的算术运算,输出结果

结合以下例子来了解其操作过程

>>> a = np.arange(4)
>>> a
array([0, 1, 2, 3])
>>> a = np.arange(4).reshape(4, 1)
>>> a
array([[0],
       [1],
       [2],
       [3]])
>>> b = np.arange(5)
>>> b.shape
(5,)
>>> b
array([0, 1, 2, 3, 4])
>>> a + b
array([[0, 1, 2, 3, 4],
       [1, 2, 3, 4, 5],
       [2, 3, 4, 5, 6],
       [3, 4, 5, 6, 7]])

数组a为二维数组,4行1列,数组b为一组数组,也可以看做是1行5列的二维数组,二者相加,对应的输出数组的行为4行,取数组a的行数,列为5列,取数组b的列数。明确输出结果为4行5列的矩阵之后,将输入的数组a和b通过广播机制扩展为4行5列的数组。

对于数组a而言,其行数和输出数组相同,列数为1,通过广播机制扩展之后,其他4列和第一列的值一样;对于数组b而言,其列数和输出数组相同,行数为1,扩展之后将其他4行的内容设置为和第一行的内容一样,可以看做是生成了以下两个中间数组

>>> a = np.array([x for x in range(4) for y in range(5)], order = 'F').reshape(4, 5)
>>> a
array([[0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2],
       [3,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值