【深度学习-预备知识】广播机制


什么是广播机制(Broadcasting)?

广播机制是 NumPy(及其他科学计算库,如TensorFlow、PyTorch)中用于处理不同形状数组进行算术运算的规则。它通过自动扩展较小数组的维度,使其与较大数组的形状兼容,从而避免显式复制数据,提升计算效率。


1. 核心规则

广播遵循两条核心规则:

  1. 形状对齐:从右向左逐维度比较两个数组的形状。
  2. 维度扩展
    • 如果两个数组在某个维度上的长度相等,或其中一个数组在该维度长度为 1,则这两个数组在该维度兼容。
    • 长度为 1 的维度会被扩展为另一数组对应维度的长度。
    • 如果两个数组在某个维度上长度不相等且均不为1,则广播失败,抛出 ValueError

2. 广播过程示例
例1:一维数组与标量
import numpy as np
a = np.array([1, 2, 3])  # shape (3,)
b = 2                    # shape ()
a + b                    # 结果:[3, 4, 5]
  • 广播步骤
    • b 被扩展为 shape (1,),然后复制到 shape (3,) 与 a 匹配,即 b为[2, 2, 2]。
例2:二维数组与一维数组
a = np.array([[1], [2], [3]])  # shape (3, 1)
b = np.array([4, 5, 6])        # shape (3,)
a + b                          # 结果:[[5,6,7], [6,7,8], [7,8,9]]
  • 广播步骤
    • a 的 shape (3,1) 与 b 的 shape (3,) 对齐后,b 被视为 shape (1,3)。
    • a 扩展第二维到3,即[[1, 1, 1], [2, 2, 2], [3, 3, 3];b 扩展第一维到3,即[[4, 5, 6], [4, 5, 6], [4, 5, 6]];最终两个数组均变为 shape (3,3)。
例3:不兼容的广播
a = np.ones((3, 4))      # shape (3,4)
b = np.ones((2, 1))      # shape (2,1)
a + b                    # 报错:无法广播 (3,4) 和 (2,1)
  • 原因:第二个维度长度4 vs 1(兼容),但第一个维度长度3 vs 2(不兼容且均不为1)。

3. 广播的实际应用
  1. 归一化数据
    data = np.random.rand(100, 10)  # shape (100,10)
    mean = data.mean(axis=0)        # shape (10,)
    data_normalized = data - mean    # mean被广播到(100,10)
    
  2. 图像处理
    image = np.random.rand(256, 256, 3)  # 彩色图像 (H, W, C)
    weights = np.array([0.3, 0.6, 0.1])  # 每个通道的权重 (3,)
    weighted_image = image * weights     # weights被广播到(256,256,3)
    

4. 注意事项
  • 显式扩展:可用 np.newaxisreshape 手动扩展维度。
    a = np.array([1, 2, 3])          # shape (3,)
    b = np.array([4, 5])             # shape (2,)
    a[:, np.newaxis] + b            # 结果:[[5,6], [6,7], [7,8]]
    
  • 性能:广播不实际复制数据,而是虚拟扩展,因此内存高效。
  • 维度顺序:若数组形状差异较大,广播可能导致意外结果,需仔细检查维度对齐。

5. 总结表
场景输入形状广播后形状
标量与数组()(3,)(3,)
一维与二维(3,1)(3,)(3,3)
三维与一维(4,5,6)(6,)(4,5,6)
不兼容广播(2,3)(4,)报错

掌握广播机制可以显著简化数组操作代码,但需严格遵循形状兼容规则! 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值