Python Numpy中的广播的含义(Numpy Broadcasting)

devtools/2024/11/8 17:59:52/

Numpy数组之间进行运算时,通常是逐元素之间进行运算,这通常要求数组具有相同的形状。而“广播(Broadcasting)”机制降低了这个限制,只需要满足一定的条件,形状不同的数组也可以进行运算,小数组会自动"广播"成和大数组相同的形状,完成运算。

文章目录

  • 一、广播的含义
  • 二、广播规则
    • 2.1 可广播的前提
    • 2.2 广播示例

一、广播的含义

广播是一种让不同形状数组间可以进行运算的机制。例如,一维数组a和标量b进行运算:

python">import numpy as np
a = np.array([1,2,3])
b = 2
a * b

在这里插入图片描述

图示如下,numpy会先检查标量b是否能广播成数组a的形状(此例可以),则numpy会将b"广播"成和a形状相同的一维数组,然后逐元素进行运算。注意这个广播只是一个逻辑上的操作,numpy并不会真正创建一个和a形状相同的数组b:
在这里插入图片描述

通过广播机制,此例在效果上等价于下面代码,a和b是形状相同的数组,逐元素进行运算:

python">import numpy as np
a = np.array([1,2,3])
b = np.array([2,2,2])
a * b

在这里插入图片描述

二、广播规则

上面的示例只是最简单的一维数组和标量,为了演示广播是什么。实际运算中,运算的参与者可能是多维数组,且维度可能不同。

2.1 可广播的前提

多维数组之间是否可以通过广播进行运算,需要逐位比较它们的形状(array.shape属性),从最末位开始,每个对应的位必须满足下面条件:元素数量相同或其中一个是1。

例如一个三维数组a的形状是(a1, a2, a3),它和一个二维数组b,形状是(b1, b2),从末尾开始逐位比较,即a3和b2比较,a2和b1比较:

  • a3=b2 或 a3,b2至少有一个为1
  • a2=b1 或 a2,b1至少有一个为1
    在这里插入图片描述
    当上面2个条件都满足时,则a和b是可广播的,运算最后的结果为三维数组,每位上的元素个数取a,b对应位上的最大值,即最终形状是(a1, max(a2,b1), max(a3,b2))。

2.2 广播示例

假设a的形状是(4,3,1),b的形状是(1,2),那么最终运算结果的形状就是(4,max(3,1),max(1,2)),即(4,3,2):

python">a = np.arange(12).reshape(4,3,1)
b = np.arange(2).reshape(1,2)
c = a * b
c.shape

在这里插入图片描述

假设b的形状是(2,2),那么在形状的倒数第二位上,a是3,b是2,它们即不相等,也不满足其中一个是1,这两个形状是无法广播的,强行运算会报无法广播的错误:

python">a = np.arange(12).reshape(4,3,1)
b = np.arange(4).reshape(2,2)
c = a * b

在这里插入图片描述


http://www.ppmy.cn/devtools/132366.html

相关文章

软件测试—功能测试详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、测试项目启动与研读需求文档 (一) 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产…

求解优化问题算法探讨与分析

一、分枝定界法:强大的优化求解工具 (一)起源与发展 分枝定界法由查理德・卡普在 20 世纪 60 年代发明,当时成功求解了含有 65 个城市的旅行商问题,创下了记录。此后,该方法被广泛应用于整数规划问题、生…

Oceanbase学习之一迁移mysql数据到oceanbase

一、数据库环境 #mysql环境 root192.168.150.162 20:28: [(none)]> select version(); ---------- | version() | ---------- | 8.0.26 | ---------- 1 row in set (0.00 sec) root192.168.150.162 20:28: [(none)]> show variables like ‘%char%’; ---…

Django中ListView 和 DetailView类的区别

在Django中,ListView 和 DetailView都是基于类的视图,在处理请求时通常会自动调用render_to_response函数,但由于项目需求不同,实现时需要重写render_to_response函数 ListView 和 DetailView介绍 ListView 介绍主要用于展示一个…

GEE| 对Landsat 8 影像进行主成分分析

对 Landsat 8 影像进行主成分分析并实现可视化 // 定义感兴趣区域 var roi ee.FeatureCollection(users/yongweicao11/Dongguan2022);// 加载 Landsat 8 图像集合,并根据 ROI 和日期范围进行过滤 var imageL8 ee.ImageCollection("LANDSAT/LC08/C02/T1_TOA…

大数据数据存储层MemSQL, HBase与HDFS

以下是对 MemSQL、HBase 和 HDFS 的详细介绍,这些工具在分布式数据存储和处理领域有着重要作用。 1. MemSQL MemSQL(现称为 SingleStore)是一种分布式内存数据库,兼具事务处理(OLTP)和分析处理(OLAP)的能力,专为高性能实时数据处理设计。 1.1 核心特点 内存优先存储…

【MongoDB】MongoDB的Java API及Spring集成(Spring Data)

文章目录 Java APISpring 集成1. 添加依赖2. 配置 MongoDB3. 创建实体类4. 创建 Repository 接口5. 创建 Service 类6. 创建 Controller 类7. 启动 Spring Boot 应用8. 测试你的 API 更多相关内容可查看 Java API maven <dependency><groupId>org.mongodb</gr…

无人机干扰与抗干扰,无人机与反制设备的矛与盾

无人机干扰与抗干扰&#xff0c;以及无人机与反制设备之间的关系&#xff0c;可以形象地比喻为矛与盾的较量。以下是对这两方面的详细探讨&#xff1a; 一、无人机干扰与抗干扰 1. 无人机干扰技术 无人机干扰技术是指通过各种手段对无人机系统进行干扰&#xff0c;使其失去正…