人工智能之数据分析 numpy:第八章 数组广播

人工智能之数据分析 numpy

第八章 数组广播


@

目录
  • 人工智能之数据分析 numpy
  • 前言
  • 一、什么是广播?
    • ✅ 核心优势:
  • 二、广播规则(必须全部满足)
  • 三、广播示例详解
    • 示例 1:标量与数组(最简单)
    • 示例 2:一维与二维(经典场景)
    • 示例 3:列向量与行向量
    • 示例 4:三维广播
  • 四、广播失败的案例
    • ❌ 维度不兼容
    • ❌ 中间维度冲突
  • 五、广播的实际应用
    • 📌 应用 1:标准化数据(Z-score)
    • 📌 应用 2:生成二维网格(用于绘图)
    • 📌 应用 3:批量矩阵偏移
  • 六、如何避免意外广播?
    • 防御性编程建议:
  • 七、广播 vs np.tile / np.repeat
  • 八、总结:广播速查表
  • 后续
  • 资料关注


前言

NumPy 的 广播(Broadcasting) 是其最强大、也最容易被误解的特性之一。它允许不同形状的数组之间进行​逐元素运算​,而无需显式复制数据,既节省内存又提升性能。


一、什么是广播?

广播​:NumPy 在执行算术运算时,自动将形状不同的数组“扩展”为兼容形状的机制。

✅ 核心优势:

  • 避免创建不必要的副本(内存高效)
  • 代码简洁(无需手动 reshapetile
  • 运算速度接近 C 语言

二、广播规则(必须全部满足)

当两个数组 AB 进行运算时,从​最后一个维度开始向前对齐​,每个维度需满足以下之一:

  1. 维度相等​,或
  2. 其中一个维度为 1​,或
  3. 其中一个数组缺少该维度​(即维度数更少)

如果所有维度都满足,则广播成功;否则报错:ValueError: operands could not be broadcast together...


三、广播示例详解

示例 1:标量与数组(最简单)

import numpy as npa = np.array([1, 2, 3])
b = 10  # 标量 → 视为 shape ()result = a + b  # [11 12 13]
  • a.shape = (3,)
  • b.shape = () → 自动扩展为 (1,) → 再广播为 (3,)

示例 2:一维与二维(经典场景)

A = np.array([[1, 2, 3],[4, 5, 6]])   # shape (2, 3)
v = np.array([10, 20, 30])   # shape (3,)C = A + v
print(C)
# [[11 22 33]
#  [14 25 36]]

广播过程​:

  • 对齐维度:A: (2, 3) vs v: (3,) → 补全为 (1, 3)
  • 比较各维度:
    • 第 1 维:2 vs 1 → 允许(1 可扩展为 2)
    • 第 2 维:3 vs 3 → 相等
  • 结果形状:(2, 3)

💡 v 被“复制”到每一行,但​没有实际复制内存​!


示例 3:列向量与行向量

row = np.array([1, 2, 3])      # shape (3,)
col = np.array([[10], [20]])   # shape (2, 1)result = row + col
print(result)
# [[11 12 13]
#  [21 22 23]]

广播过程​:

  • row: (3,) → (1, 3)
  • col: (2, 1)
  • 对齐后:
    • 第 1 维:1 vs 2 → 扩展为 2
    • 第 2 维:3 vs 1 → 扩展为 3
  • 结果:(2, 3)

🔥 这是生成网格坐标的基础!


示例 4:三维广播

A = np.ones((3, 4, 5))
B = np.ones((4, 5))C = A + B  # 成功!B 被广播到 (1,4,5) → (3,4,5)

四、广播失败的案例

❌ 维度不兼容

a = np.array([1, 2])        # (2,)
b = np.array([[1, 2, 3]])   # (1, 3)# a + b → 报错!
# 维度对齐:(1,2) vs (1,3)
# 最后一维:2 ≠ 3,且都不为1 → 无法广播

❌ 中间维度冲突

A = np.random.rand(2, 3, 4)
B = np.random.rand(2, 5, 4)# A + B → 报错!
# 第2维:3 vs 5 → 无法广播

五、广播的实际应用

📌 应用 1:标准化数据(Z-score)

data = np.random.rand(100, 5)  # 100个样本,5个特征# 计算每列均值和标准差
mean = data.mean(axis=0)   # shape (5,)
std = data.std(axis=0)     # shape (5,)# 标准化:(data - mean) / std
normalized = (data - mean) / std  # 广播自动对每行操作

📌 应用 2:生成二维网格(用于绘图)

x = np.linspace(-2, 2, 5)   # [-2 -1 0 1 2] → (5,)
y = np.linspace(-1, 1, 3)   # [-1 0 1]       → (3,)# 转为列向量和行向量
X = x[np.newaxis, :]  # shape (1, 5)
Y = y[:, np.newaxis]  # shape (3, 1)# 广播生成网格
grid_sum = X + Y
print(grid_sum)
# [[-3. -2. -1.  0.  1.]
#  [-2. -1.  0.  1.  2.]
#  [-1.  0.  1.  2.  3.]]

✅ 这正是 np.meshgrid() 的底层原理!

📌 应用 3:批量矩阵偏移

# 10 个 3x3 矩阵
matrices = np.random.rand(10, 3, 3)# 一个公共偏移向量(加到每行)
offset = np.array([10, 20, 30])  # (3,)# 广播:offset 自动应用到每个矩阵的每一行
result = matrices + offset  # shape (10, 3, 3)

六、如何避免意外广播?

有时广播会导致​逻辑错误​(如本想矩阵乘法却做了逐元素乘)。

防御性编程建议:

  1. 显式检查形状
    assert a.shape == b.shape or ...  # 根据业务逻辑
    
  2. 使用 np.newaxis 明确维度
    # 确保 v 是列向量
    v = v[:, np.newaxis]
    
  3. 慎用高维自动广播
    # 如果不确定,先 reshape 到预期形状
    b = b.reshape(1, -1)
    

七、广播 vs np.tile / np.repeat

方法 内存 速度 推荐
广播 不复制数据 极快 ✅ 首选
np.tile 创建完整副本 ❌ 仅调试用
np.repeat 创建副本
# 不推荐(浪费内存)
A = np.array([[1, 2], [3, 4]])
B = np.tile([10, 20], (2, 1))  # 显式复制
C = A + B# 推荐(广播)
C = A + [10, 20]  # 自动广播,无内存开销

八、总结:广播速查表

操作 是否广播 结果形状
(3,) + () (3,)
(2,3) + (3,) (2,3)
(2,1) + (3,) (2,3)
(2,3) + (2,1) (2,3)
(2,3) + (3,2) 报错
(4,1,3) + (2,3) (4,2,3)

🧠 ​记忆口诀​:从右往左对齐,1 可扩,等则留,否则错。


后续

本文主要讲述了numpy数组广播。python过渡项目部分代码已经上传至gitee,后续会逐步更新,主要受时间原因限制,当然自己也可以克隆到本地学习拓展。

资料关注

公众号:咚咚王
gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/974144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20251123 之所思 - 人生如梦

20251123 之所思今天做的好的事情:1. 终于将下周给老板的汇报材料做完了,虽然很艰难,但是自己没有逃避,而是一页一页的去整理数据,做图表。同时也在周末将两位候选人的面试也做完了,结果也反馈给了HR,上周遗留…

人工智能之数据分析 numpy:第十章 副本视图

人工智能之数据分析 numpy:第十章 副本视图人工智能之数据分析 numpy 第十章 副本视图@目录人工智能之数据分析 numpy前言一、核心概念二、如何判断是副本还是视图?三、常见操作:返回视图 vs 副本✅ 返回 视图 的操…

11月23日总结 - 作业----

11月23日总结学习英语六级内容

Node.js 端的接口签名处理

用MD5,SHA256,HMAC-SHA256,RSA-SHA256签名算法 适用场景 博客或网站接口:保护评论提交,数据查询等接口,防止恶意请求或数据篡改 前后端分离项目:确保前端发送的请求未被中间人篡改,验证请求来源合法性 服务间调…

2025年西北地区怎么选智慧水务系统服务商?陕西、宁夏、新疆、甘肃,优先选这些品牌。

随着水资源管理智能化升级加速,智慧水务系统已成为构建现代水治理体系的核心支撑。本榜单基于技术创新性、场景适配能力、服务保障体系三大维度,结合行业用户调研与项目实施数据,深度解析国内领先智慧水务服务商综合…

ABC433 解题报告

A 略。 B 略。 C 提取极长同色段。 D 考虑一个数在作为操作时的第一个数和第二个数时对余数的贡献。 E 先判掉 \(X\) 或 \(Y\) 中有重复元素的情况。 因为限制和最大值有关,考虑倒序填入每一个数 \(i\)。接下来分类讨…

k8s中的微服务 - 教程

k8s中的微服务 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…

20232402 2025-2026-1 《网络与系统攻防技术》实验六实验报告

20232402 2025-2026-1 《网络与系统攻防技术》实验六实验报告 1.实验内容 1.1 发现Metasploitable2靶机,并对其进行端口扫描、漏洞扫描; 1.2 利用Vsftpd源码包后门漏洞; 1.3 利用SambaMS-RPC Shell命令注入漏洞; 1…

P2949 [USACO09OPEN] Work Scheduling G 题解

注意到反悔贪心的题基本没怎么做过。 P2949 [USACO09OPEN] Work Scheduling G 思路 注意到这是一个二维的东西,因此可能先去想 DP。但是注意到限制(时间)与贡献是独立的,因此考虑去扫时间而去维护贡献。 更准确地说…

the success of Japan

As the worlds most extremely violent country in English way become a forced peaceful country. The reason for a persons success lies in the diversity of thought.

预训练的卷积神经网络与普通卷积神经网络有什么区别

核心差别只有一点:“预训练”的权重已经在大规模数据上收敛过一次,而普通(从零开始)网络的权重仍是随机分布的。 除此之外,网络结构、前向计算、参数量、输入输出格式完全一样;差异只体现在“权重的初始状态”和…

人工智能之数据分析 numpy:第九章 数组运算

人工智能之数据分析 numpy:第九章 数组运算人工智能之数据分析 numpy 第九章 数组运算@目录人工智能之数据分析 numpy前言一、基础算术运算(Element-wise Arithmetic)1. 基本运算符(支持广播)2. 广播(Broadcasti…

Faster R-CNN中的Backbone,输入图片时,是标注过的图片吗

不是。Faster R-CNN 的 Backbone 在“前向推理阶段”只收一张裸图(像素矩阵),任何标注(框、类、掩码)都不进网络。标注只在“训练阶段计算损失”时用到,而且只跟 RPN 和 RoI Head 打交道,Backbone 本身仍然只看…

赫尔默特变化 A=0的情况

🎯 当测站 S 接近 A、B 的连线(近共线布设)时,会导致局部方向 A′B′ 对观测误差极其敏感,从而容易出现 A=0(方向正交) 下面是 完整的、严谨的、可写进论文的数学推导,但我把它讲得简单易懂。✅ 第 1 步:建立…

关于tarjan的一些感性理解

学长博客-图论 0x0 前论: 在了解完tarjan的基本操作以后,发现这个东西十分的抽象,那么这个时候就需要我们进行一些感性理解以方便记忆。 0x1 关于强连通分量 Part-1 关于强连通 说白了就是一个图上任意两个点都能到…

java linux tomcat

你提到的“Java Linux Tomcat”可能是指在 Linux 系统上安装和配置 Tomcat 来运行 Java 应用程序。以下是一些常见的 Linux 系统上安装和管理 Tomcat 的命令和脚本示例,适用于大多数 Linux 发行版(如 Ubuntu、CentOS…

20232411 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 总结一下本周学习内容,不要复制粘贴 2.实验过程 1.准备环境 从Rapid7官网下载官方靶机Metasploitable2,完成前期环境配置。2.前期渗透 (1)主机发现 (2)端口扫描 (3)漏洞扫描 3.Vsftpd源码包后门漏洞(21端…

实用指南:机器人描述文件xacro(urdf扩展)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

代码随想录Day17_二叉树

代码随想录Day17_二叉树今日的四道题目分别是重叠二叉树 在已知二叉树中搜索并返回以给定值为根节点的二叉树 判断二叉树是否是二叉搜索树 在给定数组中重建最大二叉树最大二叉树 题目理解: 给定一个数组,其中最大的…

人工智能之数据分析 numpy:第七章 数组迭代排序筛选

人工智能之数据分析 numpy:第七章 数组迭代排序筛选人工智能之数据分析 numpy 第七章 数组迭代排序筛选@目录人工智能之数据分析 numpy前言一、数组迭代(Iteration)⚠️ 原则:尽量避免显式 for 循环!优先使用向量…