python 中的 NumPy 库中的广播规则

news2024/11/15 2:10:04

在 Python 中的 NumPy 库中,**广播**(broadcasting)是一种用于在不同形状的数组间执行元素级运算的机制。广播允许我们在不显式复制数据的情况下执行计算,自动扩展数组的形状以匹配彼此,从而简化代码,提高运算效率。

### 广播规则
当 NumPy 尝试广播两个数组时,会遵循以下规则:

1. **从后往前比较维度**:
   - 从两个数组的最后一个维度开始逐个比较,如果维度相同,或者其中一个维度是 1,则继续比较下一个维度。
   
2. **维度不兼容时自动扩展为相同形状**:
   - 如果一个数组的维度为 1,而另一个数组的维度不同,则 NumPy 会将该维度的大小扩展为匹配的维度。

3. **广播成功条件**:
   - 两个数组的维度要么相等,要么其中一个维度为 1,否则无法广播。

### 广播的例子

#### 例 1:标量与数组广播
```python
import numpy as np

a = np.array([1, 2, 3])
b = 2
result = a + b  # 结果:[3, 4, 5]
```
这里 `b` 是标量,NumPy 自动将 `b` 扩展为 `[2, 2, 2]`,然后和 `a` 相加。

#### 例 2:一维数组和二维数组广播
```python
import numpy as np

a = np.array([1, 2, 3])         # 形状为 (3,)
b = np.array([[10], [20], [30]]) # 形状为 (3, 1)

result = a + b
# 结果:
# [[11, 12, 13],
#  [21, 22, 23],
#  [31, 32, 33]]
```
在这里,`a` 的形状是 `(3,)`,`b` 的形状是 `(3, 1)`。NumPy 会将 `a` 的形状扩展为 `(3, 3)`,将 `b` 的形状扩展为 `(3, 3)`,然后进行元素级相加。

#### 例 3:不同大小的二维数组广播
```python
import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])  # 形状为 (2, 3)
b = np.array([[10], [20]])            # 形状为 (2, 1)

result = a + b
# 结果:
# [[11, 12, 13],
#  [24, 25, 26]]
```
这里 `a` 的形状是 `(2, 3)`,`b` 的形状是 `(2, 1)`。NumPy 会将 `b` 的形状扩展为 `(2, 3)`,然后逐元素相加。

#### 例 4:广播失败的情况
```python
import numpy as np

a = np.array([1, 2, 3])        # 形状为 (3,)
b = np.array([[1, 2], [3, 4]]) # 形状为 (2, 2)

# result = a + b  # 报错:operands could not be broadcast together
```
在这种情况下,`a` 的形状是 `(3,)`,`b` 的形状是 `(2, 2)`。两者的维度不兼容,无法广播,因此运算失败。

在这个例子中,`a` 和 `b` 可以广播的原因是:

- **数组 `a` 的形状**是 `(2,)`。
- **数组 `b` 的形状**是 `(2, 2)`。

根据广播规则,**从后往前**比较两个数组的维度(并在需要时补齐前面的维度):

1. `a` 的形状 `(2,)` 可以理解为 `(1, 2)`,这样就和 `b` 的形状 `(2, 2)` 有了匹配的维度。
2. 按照广播规则,如果两个维度中的一个是 1,那么 NumPy 会将这个维度扩展到与另一数组的维度相同。

因此,`a` 会被扩展为形状 `(2, 2)`,具体扩展为:

```
a: [[1, 2],
    [1, 2]]
```

此时 `a` 和 `b` 的形状匹配,就可以逐元素运算了。

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

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

相关文章

16.UE5拉怪机制,怪物攻击玩家,伤害源,修复原视频中的BUG

2-18 拉怪机制,怪物攻击玩家、伤害源、黑板_哔哩哔哩_bilibili 目录 1.实行行为树实现拉怪机制 1.1行为树黑板 1.2获取施加伤害对象(伤害源) 2.修复原视频中,第二次攻击怪物后,怪物卡在原地不动的BUG 3.怪物攻击玩…

大数据新视界 -- 大数据大厂之 Impala 性能飞跃:动态分区调整的策略与方法(上)(21 / 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Vue3 笔记 (万字速通)

此笔记来至于尚硅谷,仅供笔者复习使用 1. Vue3 简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n) 经历了:4800次提交、40个RFC、600次PR、300贡献者 官方发版地址:Rele…

Linux基础1

Linux基础1 Linux基础1学习笔记 ‍ 声明! ​​​学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他…

Linux中.NET读取excel组件,不会出现The type initializer for ‘Gdip‘ threw an exception异常

组件,可通过nuget安装,直接搜名字: ExcelDataReader using ConsoleAppReadFileData.Model; using ExcelDataReader; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Task…

320页PDF | 集团IT蓝图总体规划报告-德勤(限免下载)

一、前言 这份报告是集团IT蓝图总体规划报告-德勤。在报告中详细阐述了德勤为某集团制定的全面IT蓝图总体规划,包括了集团信息化目标蓝图、IT应用规划、数据规划、IT集成架构、IT基础设施规划以及IT治理体系规划等关键领域,旨在为集团未来的信息化发展提…

乐维网管平台(六):如何正确管理设备端口

一、什么是端口下联 在网络环境中,端口下联是指网络设备(通常是交换机)的端口与其他设备相连接的一种网络架构关系。交换机作为网络中的核心连接设备,其端口下联可以连接多种类型的终端设备,如计算机、服务器、IP 电话…

迁移学习相关基础

迁移学习 目标 将某个领域或任务上学习到的知识或模式应用到不同但相关的领域或问题中。 主要思想 从相关领域中迁移标注数据或者知识结构、完成或改进目标领域或任务的学习效果。 概述 Target data:和你的任务有直接关系的数据,但数据量少&#xff…

Diffusion Policy——斯坦福机器人UMI所用的扩散策略:从原理到其编码实现(含Diff-Control、ControlNet详解)

前言 本文一开始是属于此文《UMI——斯坦福刷盘机器人:从手持夹持器到动作预测Diffusion Policy(含代码解读)》的第三部分,考虑后Diffusion Policy的重要性很高,加之后续还有一系列基于其的改进工作 故独立成本文,且写的过程中 …

麒麟V10,arm64,离线安装docker和docker-compose

文章目录 一、下载1.1 docker1.2 docker-compose1.3 docker.service 二、安装三、验证安装成功3.1 docker3.2 docker-compose 需要在离线环境的系统了里面安装docker。目前国产化主推的是麒麟os和鲲鹏的cpu,这块的教程还比较少,记录一下。 # cat /etc/ky…

接口测试整体框架

接口测试 1. 接口 接口,也叫api(Application Programming Interface,应用程序编程接口),接口(Interface)是指不同软件组件或系统之间进行交互的点。接口定义了组件之间如何通信,包括…

2024 ECCV | DualDn: 通过可微ISP进行双域去噪

文章标题:《DualDn: Dual-domain Denoising via Differentiable ISP》 论文链接: DualDn 代码链接: https://openimaginglab.github.io/DualDn/ 本文收录于2024ECCV,是上海AI Lab、浙江大学、香港中文大学(薛天帆等…

AI制作ppt

1,kimi: 实际上也是AiPPT.cn这个网站(但是有实际次数限制) 2,其余专业AI ppt生成网站: (1)gamma:https://gamma.app/ 大概能制作7~10页左右 free的ppt,其余要…

10款PDF翻译工具的探索之旅:我的使用经历与工具特色!!

在如今的时代,PDF文件已经成为我们工作、学习和生活中不可或缺的一部分。但是,当遇到一些非母语或陌生语言的PDF文档时,这要怎么办呀!这时候翻译工具就显得尤为重要了。这也是我所遇到过的难题,现在我将与大家分享几款…

【java】java通过s3访问ceph报错

1.报错信息、背景 工作中起了几个访问ceph的服务pod节点,一段时间后1个节点一直报错Unable to execute HTTP request: Timeout waiting for connection from pool,详细i信息如下图片,有且仅有1个节点报错,其他节点访问正常。看日志…

飞牛私有云访问外网

飞牛私有云 fnOS NAS 是一款有着卓越的性能以及强大的兼容性和智能化的管理界面,它之所以能在 NAS 市场中脱颖而出,是因为 fnOS 基于最新的 Linux 内核(Debian发行版)深度开发,不仅兼容主流 x86 硬件,还支持…

【iOS】知乎日报第三周总结

【iOS】知乎日报第三周总结 文章目录 【iOS】知乎日报第三周总结前言评论区文字评论区的一个展开效果评论区数据的一个请求修改了主页获取数据的逻辑主页无限轮播图图片主色调的一个获取将一些拓展部分的内容写在分类里小结 前言 本周笔者因为金工实习整个项目进展比较慢&#…

局域网到公网的飞跃:LocalSend + Cpolar让文件传输再无边界

前言 本篇教程主要分享如何在Windows系统中部署开源免费文件传输工具LocalSend,并且结合cpolar内网穿透将其发布至公网实现远程使用进行文件下载传输。localsend是一款基于局域网的文件传输工具,它利用局域网的高速传输特性,实现了设备之间的…

1.62亿元!812个项目立项!上海市2024年度“科技创新行动计划”自然科学基金项目立项

本期精选SCI&EI ●IEEE 1区TOP 计算机类(含CCF); ●EI快刊:最快1周录用! 知网(CNKI)、谷歌学术期刊 ●7天录用-检索(100%录用),1周上线; 免费稿件评估 免费匹配期…

大数据应用开发——实时数据处理(一)

前言 大数据应用开发——实时数据采集 大数据应用开发——实时数据处理 Flink完成Kafka中的数据消费,将数据分发至Kafka的dwd层中 并在HBase中进行备份 大数据应用开发——数据可视化 hadoop,zookeeper,kafka,flink要开启 目…