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

numpy 广播详解(Broadcasting)​​

NumPy 的 ​广播(Broadcasting)​​ 是一种强大的机制,允许在不同形状的数组之间执行元素级运算(如加减乘除),而无需显式复制数据。它通过智能地扩展较小数组的维度来实现高效计算,是向量化操作的核心。

前言shape详解

在NumPy中,数组的形状(shape)是一个描述数组每个维度大小的元组。形状(2, 3, 4)表示一个三维数组,其中:
第一个维度(也称为轴0)的大小为2
第二个维度(轴1)的大小为3
第三个维度(轴2)的大小为4

我们可以这样理解:
这个数组有2个“层”(第一维)
每个“层”有3行(第二维)
每行有4个元素(第三维)
例如,一个形状为(2,3,4)的数组可以看作是两个3行4列的矩阵(即两个3x4的矩阵)。
我们可以用以下代码创建一个形状为(2,3,4)的数组并查看其内容:

import numpy as np
#创建一个形状为(2,3,4)的数组,元素从0到23
arr = np.arange(24).reshape(2, 3, 4)
print(arr)
输出将类似于:[[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]][[12 13 14 15][16 17 18 19][20 21 22 23]]]

在这个数组中:
第一层(索引0)是一个3x4的矩阵:
[0, 1, 2, 3]
[4, 5, 6, 7]
[8, 9, 10, 11]
第二层(索引1)是另一个3x4的矩阵:
[12, 13, 14, 15]
[16, 17, 18, 19]
[20, 21, 22, 23]
当我们访问数组时:
arr[0]会返回一个形状为(3,4)的数组(第一层)
arr[0, 1]会返回第一层第二行的数组:[4,5,6,7]
arr[0, 1, 2]会返回第一层第二行第三列的元素:6
总结:形状(2,3,4)表示一个三维数组,由2个3x4的矩阵组成。

一、广播的核心规则​

广播遵循两条严格规则,按顺序检查:

1、​维度对齐(尾部对齐)​​

将两个数组的维度从尾部(最右边)开始对齐。若维度不等,在较小数组的左侧补 1,直到维度相同。​示例​:

  • A.shape = (3, 4),B.shape = (4,)
    → 对齐后:A.shape = (3, 4),B.shape = (1, 4)
  • A.shape = (8, 3, 2),B.shape = (2,)
    → 对齐后:A.shape = (8, 3, 2),B.shape = (1, 1, 2)
  • A.shape = (9, 4, 3),B.shape = (2,)
    → 对齐后:A.shape =(9, 4, 3),B.shape = (1, 1, 2)

2、​尺寸兼容性检查​

对齐后的每个维度尺寸需满足以下条件之一:

  • ​相等​
  • ​其中一个为 1​(此时会沿该维度复制数据)
  • ​不满足则抛出 ValueError。

示例​:
A.shape = (3, 4),B.shape = (1, 4)→ ​兼容​(B 沿第0维复制3次)
A.shape = (3, 4),B.shape = (2, 4)→ ​不兼容​(第0维 3≠2 且均不为1)
A.shape = (3, 1, 5),B.shape = (4, 5)→ ​兼容​(B 扩展为 (1,4,5),A 沿第1维复制4次,B沿着第0维复制三次,最终A与B的形状相同,且数据是从元数据按照某一维度复制来的)

二、广播的典型场景

1、数组与标量运算

import numpy as np
arr = np.array([[1, 2], [3, 4]])
result = arr * 10  # 标量10被广播为 [[10,10], [10,10]]

广播过程​:
arr.shape = (2, 2),10.shape = ()
标量补维 → 10.shape = (1, 1)
沿两个维度复制 → (2, 2)

2、行向量与列向量相加

a = np.array([1, 2, 3])    # shape=(3,) → (1,3)
b = np.array([[10], [20]]) # shape=(2,1),相当于一列数据 10,20
result = a + b             # 输出:[[11,12,13], [21,22,23]]

广播过程​:
a.shape = (3,)→ 补维 (1,3)
b.shape = (2,1)

扩展:
a沿第0维复制 → shape=(2,3)
b沿第1维复制 → shape=(2,3)

3、​高维数组广播​

A = np.arange(24).reshape(2, 3, 4)  # shape=(2,3,4)
B = np.array([100, 200, 300, 400])   # shape=(4,) → (1,1,4)
C = A + B  # B被广播到(2,3,4)

广播过程​:
B.shape = (4,)→ 补维 (1,1,4)
沿第0维复制2次、第1维复制3次 → 与A同形

http://www.dtcms.com/a/519572.html

相关文章:

  • 【数据结构】 [特殊字符] 顺序表详解——数据结构的第一块基石
  • 企业级安全运营中心(SOC)建设实战:从威胁检测到自动化响应
  • 分布式存储Ceph与OpenStack、RAID的关系
  • “五金件自动化上下料”革新:人形机器人如何重塑柔性制造
  • 多线程六脉神剑第二剑:监视器锁 (Monitor)
  • 飞书多维表格自动化做音视频文案提取,打造素材库工作流,1分钟学会
  • 基于主题聚类的聊天数据压缩与智能检索系统
  • 结构健康自动化监测在云端看数据变化,比人工更及时精准,优缺点分析?
  • 做夹具需要知道的几个网站服装页面设计的网站
  • 分享影视资源的网站怎么做网站字头优化
  • 照明回路配线-批量测量超实用
  • Python 条件判断机制本质
  • 关于spiderdemo第二题的奇思妙想
  • Python处理指定目录下文件分析操作体系化总结
  • k8s部署自动化工具jenkins
  • YOLOv5 目标检测算法详解(一)
  • No040:陪伴的艺术——当DeepSeek学会在时光中温柔在场
  • 6-1〔O҉S҉C҉P҉ ◈ 研记〕❘ 客户端攻击▸侦查客户端指纹
  • 苏州企业网站设计企业phpstudy如何建设网站
  • 仿站网站域名网站建设数据库实验心得
  • 怎么看电脑的主板BIOS型号
  • 广东省高校质量工程建设网站管理登陆网站开发软件
  • 压缩与缓存调优实战指南:从0到1根治性能瓶颈(一)
  • LeetCode 381: O(1) 时间插入、删除和获取随机元素 - 允许重复
  • 一次RedisOOM 排查
  • MongoDB迁移到KES实战全纪录(下):性能优化与实践总结
  • 【Java 开发日记】我们来讲一讲阻塞队列及其应用
  • 免费网站统计代码农业电商平台有哪些
  • 在长沙做网站需要多少钱手机网页禁止访问解除
  • IEEE754是什么?