当前位置: 首页 > news >正文

广播机制(Broadcasting)

NumPy 默认是元素与元素的操作

所以当我们使用常规的运算符,如 +、-、*、/。默认是元素与元素相操作(pointwise operation)。

import numpy as np
a = np.array([1.0, 2.0, 3.0])
b = np.array([2.0, 2.0, 2.0])
print(a + b)
print(a - b)
print(a * b)
print(a / b)

[3. 4. 5.]
[-1.  0.  1.]
[2. 4. 6.]
[0.5 1.  1.5]

广播规则

两个向量能够进行元素级的操作需要满足以下两个条件中的一个:

  • 它们所有轴上的维度相同
  • 在每个轴上,如果维度不同,那么有一个维度应该为 1,或这个轴不存在
    注: 关于轴的理解,如一个向量的shape为(3,256,256),那么它的轴个数为 3,第一个轴维度为3,第二个轴维度为 256,第三个轴维度为 256

比较轴的维度时,我们是从右向左看,如:

# 此向量有三个轴,从右到左的维度为 256 256 3
img = np.random.randn(3,256,256)
img .shape
(3, 256, 256)

当我们想让 img 乘以标量 2 会发生什么呢

img*2

img:(3, 256, 256)
# 标量 2,会首先变为与img轴数相同的数据(1,1,1)
# 与 img 最后一个维度进行对比 img 最后一个维度为256,所以将标量最后一个维度变为256
# 比较倒数2个维度,将标量最后一个维度变为256
# 比较倒数3个维度,将标量最后一个维度变为256
# 此时标量伸展的维度与img相同,两者可以直接进行元素运算
scale:2
2->(1,1,1)->(1,1,256,)->(1,256,256)->(3,256,256)

更多例子:

# 满足所有轴维度相同
>>> x=torch.empty(5,7,3)
>>> y=torch.empty(5,7,3)
# same shapes are always broadcastable (i.e. the above rules always hold)

>>> x=torch.empty((0,))
>>> y=torch.empty(2,2)
# x and y are not broadcastable, because x does not have at least 1 dimension

# can line up trailing dimensions
>>> x=torch.empty(5,3,4,1)
>>> y=torch.empty(  3,1,1)
# x and y are broadcastable.
# 1st trailing dimension: both have size 1
# 2nd trailing dimension: y has size 1
# 3rd trailing dimension: x size == y size
# 4th trailing dimension: y dimension doesn't exist

# but:
>>> x=torch.empty(5,2,4,1)
>>> y=torch.empty(  3,1,1)
# x and y are not broadcastable, because in the 3rd trailing dimension 2 != 3

参考:https://numpy.org/doc/stable/user/basics.broadcasting.html
https://pytorch.org/docs/stable/notes/broadcasting.html

相关文章:

  • vue3 前端路由权限控制与字典数据缓存实践(附Demo)
  • STM32F407 cubeIDE Bootloader APP 如何写
  • 【从零开始学习计算机科学】数据库系统(二)关系数据库 与 关系代数
  • AI学习——深度学习核心技术深度解析
  • 时间序列预测(十九)——卷积神经网络(CNN)在时间序列中的应用
  • g++链接及动态库和静态库浅析
  • 2025年Java面试题目收集整理归纳(持续更新)
  • 模板(初阶)
  • Java 浅拷贝和深拷贝
  • 【空间插值】地理加权回归模型(GWR, Geographically Weighted Regression)
  • Windows 发票闪印 PrintPDF-v3.6.10-第三方发票打印辅助工具,无需安装阅读器即可使用
  • 使用 ESP32 和 Python 进行手势识别
  • 蓝桥与力扣刷题(蓝桥 等差数列)
  • Word中把参考文献引用改为上标
  • Linux上位机开发实战(按钮响应)
  • AI绘画软件Stable Diffusion详解教程(10):图生图进阶篇(局部手绘修正)
  • Python 正则表达式模块 re
  • 「基于大模型的智能客服系统」语义理解、上下文记忆与反馈机制设计
  • 实现悬浮按钮拖动,兼容h5和微信小程序
  • LinPEAS 使用最佳实践指南
  • 广西落马官员家中发现大量金砖?官方辟谣
  • 单方面免签11个常见问题,外交部权威解答
  • 林诗栋/蒯曼不敌日本组合,无缘晋级世乒赛混双四强
  • 第九届非遗节首设主宾国主宾城机制,非遗品牌IP授权获关注
  • 每日475.52元!最高检公布侵犯公民人身自由最新赔偿金标准
  • 中疾控专家:新冠感染的临床严重性未发生显著变化