12_基本运算和广播机制 数组的基本运算大小相等的数组之间的任何算术运算都会将运算应用到元素级对应位置元素直接运算 - * /广播机制广播兼容规则两个维度相等或者其中一个是 1就能广播。第一步自动补齐维度左边补 1第二步广播自动扩展成一样大第三步逐元素相加importnumpyasnp# 2.8 基本运算defbaseOperationFun():# numpy中的数组不用编写循环即可执行批量运算称之为矢量化运算。# 叠加运算即可大小相等的数组之间的任何算术运算都会将运算应用到元素级。arr1np.array([[1,2,3],[4,5,6]])arr2np.array([[7,8,9],[10,11,12]])print(arr1arr2)print(arr1-arr2)print(arr1*arr2)print(arr1/arr2)print()defbaseOperationByCoefficient():#数组与标量的算术运算会将标量值传播到各个元素不同大小的数组之间的运算叫做广播。# 类似看作矩阵变为一排人人有份arr1np.array([[1,2,3],[4,5,6]])print(arr1100)print(arr1-100)print(arr1*100)print(arr1/100)# 广播机制是 NumPy 中一个允许在不同形状的数组之间进行元素级运算defbroadcastFun():arr1np.array([1,2,3])arr2np.array([[4],[5],[6]])print(arr1.shape)# (3,)一根竹签上串了3颗糖没有行和列的概念就是一条线print(arr2.shape)# 3行1列二维print(arr1arr2) 广播兼容规则两个维度相等或者其中一个是 1就能广播。 3 和 1 → 1 能扩成 3 ✓1 和 3 → 1 能扩成 3 ✓ 上述运算步骤细分拆解 第一步自动补齐维度左边补 1 arr1 (3,) → 补齐成 (1, 3) arr2 (3,1) → 保持 (3, 1) 第二步广播自动扩展成一样大 arr1 从 (1,3) 扩展成 (3,3) 沿着行复制 3 次 [1,2,3] [1,2,3] [1,2,3] arr2 从 (3,1) 扩展成 (3,3) 沿着列复制 3 次 [4,4,4] [5,5,5] [6,6,6] arr1 (1,3) → 纵向复制 3 次 → (3,3) arr2 (3,1) → 横向复制 3 次 → (3,3) ┌───┬───┬───┐ ┌───┬───┬───┐ │ 1 │ 2 │ 3 │ ← 原数据 │ 4 │ 4 │ 4 │ ← 4 横向拷贝 3 份 ├───┼───┼───┤ ← 复制第1行 ├───┼───┼───┤ │ 1 │ 2 │ 3 │ ← 复制第2行 │ 5 │ 5 │ 5 │ ← 5 横向拷贝 3 份 ├───┼───┼───┤ ← 复制第3行 ├───┼───┼───┤ │ 1 │ 2 │ 3 │ │ 6 │ 6 │ 6 │ ← 6 横向拷贝 3 份 └───┴───┴───┘ └───┴───┴───┘ 第三步逐元素相加 [1,2,3] [4,4,4] [5,6,7] [1,2,3] [5,5,5] [6,7,8] [1,2,3] [6,6,6] [7,8,9] 最终结果 [[5 6 7] [6 7 8] [7 8 9]] 总结 (3,) → 横向扩展复制行 (3,1) → 纵向扩展复制列 最后变成同样大小的矩阵再逐元素相加 广播兼容规则两个维度相等或者其中一个是 1就能广播。 3 和 1 → 1 能扩成 3 ✓ 1 和 3 → 1 能扩成 3 ✓ 从右往左比 第0维(最右): 3 vs 1 → 1 可以扩展到 3 ✓ 第1维: 1 vs 3 → 1 可以扩展到 3 ✓ defbroadcastFunError():# 一维数组arr5np.array([1,2,3])# 形状为 (3,)# 一维数组arr6np.array([4,5])# 形状为 (2,)try:resultarr5arr6print(result)exceptExceptionase:print(f错误信息(3,) 和 (2,) 完全不兼容不能运算: \n{e}) arr5 维度: (3,) → (3,) arr6 维度: (2,) → (2,) 从右往左比第0维: 3 vs 2 → 3 ≠ 2而且谁也不是 1 ✗/(ㄒoㄒ)/~~ 可以想象成要把两个矩阵拉伸成一样尺寸才能对应位置相加 [1,2,3] 是 3 个位置 [4,5] 只有 2 个位置 数量对不上没法一一配对计算程序不知道第 3 个数字拿谁去加所以报错。 if__name____main__:baseOperationFun()# baseOperationByCoefficient()# broadcastFun()# broadcastFunError()

相关新闻

最新新闻

VC++ CAD软件源码解析:从架构设计到图形渲染实战

VC++ CAD软件源码解析:从架构设计到图形渲染实战

1. 项目概述:从源码视角看工业级CAD软件的构建如果你是一名使用Visual C(VC)进行桌面应用开发的工程师,并且对计算机辅助设计(CAD)这类大型、复杂的图形软件的内部构造充满好奇,那么“深入解析V…

2026/8/8 1:42:56
ncmdumpGUI:3分钟解锁网易云音乐NCM格式,让音乐真正属于你!

ncmdumpGUI:3分钟解锁网易云音乐NCM格式,让音乐真正属于你!

ncmdumpGUI:3分钟解锁网易云音乐NCM格式,让音乐真正属于你! 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易…

2026/8/8 1:42:56
招聘大数据分析实战:从数据清洗到可视化洞察的全流程解析

招聘大数据分析实战:从数据清洗到可视化洞察的全流程解析

1. 项目概述:从“头歌”平台看招聘大数据分析的实战价值最近在“头歌”这类实践平台上,看到一个挺有意思的项目:“招聘大数据——数据分析”。这名字听起来有点宽泛,但结合平台特性,我猜它核心是让你上手处理一份真实的…

2026/8/8 1:42:56
汇川H5U远程IO映射配置实战:从原理到调试完整指南

汇川H5U远程IO映射配置实战:从原理到调试完整指南

如果你正在使用汇川 H5U 系列 PLC,并且项目中接入了远程 I/O 模块,那么你很可能已经遇到了一个核心挑战:如何让 PLC 主站“认识”并正确使用这些远程模块上的输入输出点?这个问题看似基础,却是整个分布式控制系统能否稳…

2026/8/8 1:42:56
GRETNA工具箱:MATLAB图论网络分析的终极完整指南

GRETNA工具箱:MATLAB图论网络分析的终极完整指南

GRETNA工具箱:MATLAB图论网络分析的终极完整指南 【免费下载链接】GRETNA A Graph-theoretical Network Analysis Toolkit in MATLAB 项目地址: https://gitcode.com/gh_mirrors/gr/GRETNA 你是否曾经面对复杂的脑网络数据感到无从下手?神经影像研…

2026/8/8 1:42:56
AI代码助手与低代码报表工具结合实践:从自然语言到可视化报表的自动化生成

AI代码助手与低代码报表工具结合实践:从自然语言到可视化报表的自动化生成

1. 项目概述:当AI代码助手遇上报表生成,一场效率革命正在发生最近,AI代码助手和开源大模型的热度居高不下,Claude Code、DeepSeek V4 Flash这些名字几乎成了开发者圈子里的高频词。与此同时,像“积木报表”这类低代码/…

2026/8/8 1:37:56