深入理解 NumPy 广播机制:从基础到应用

目录

  • 什么是广播机制?
  • 广播机制的规则
  • 广播机制示例
    • 1. 一维数组与标量运算
    • 2. 二维数组与一维数组运算
    • 3. 维度不同的数组运算
    • 4. 广播失败的情况
  • 广播机制的实际应用场景
    • 1. 数据归一化
    • 2. 批量计算欧氏距离
  • 总结
    • 广播机制的核心要点:

在使用 NumPy 进行数组操作时,你会发现不同形状的数组居然可以直接进行算术运算。这种神奇的功能背后,就是 广播机制(Broadcasting)。本文将详细讲解 NumPy 广播机制的工作原理、规则,以及如何在实际场景中应用它,帮助你高效地进行数值计算。


什么是广播机制?

广播机制 是 NumPy 中用于处理不同形状数组之间算术运算的一种方法。当两个数组的形状不完全相同时,NumPy 通过自动扩展(广播)较小的数组来匹配较大的数组,从而使它们能够进行逐元素运算。

这种机制避免了手动调整数组形状的繁琐过程,大大提高了代码的简洁性和执行效率。


广播机制的规则

在进行广播时,NumPy 遵循以下三条规则来扩展数组:

  1. 如果两个数组的维度数不同,较小的数组会在左侧添加 1 维度,直到它们的维度数相同。
  2. 如果两个数组在某个维度上的大小不相同,但其中一个维度的大小为 1,那么 NumPy 会在该维度上扩展大小为 1 的数组。
  3. 如果两个数组在某个维度上的大小不相同,且两个数组的该维度都不为 1,则会报错。

广播机制示例

1. 一维数组与标量运算

当一维数组与标量进行运算时,标量会被广播到数组的每个元素。

import numpy as nparr = np.array([1, 2, 3, 4])
result = arr + 10
print(result)

输出:

[11 12 13 14]

解释:
标量 10 被广播为 [10, 10, 10, 10],然后与 arr 逐元素相加。


2. 二维数组与一维数组运算

当一个二维数组和一个一维数组进行运算时,如果一维数组的形状与二维数组的某个维度匹配,则一维数组会沿着另一个维度进行广播。

arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
arr_1d = np.array([10, 20, 30])result = arr_2d + arr_1d
print(result)

输出:

[[11 22 33][14 25 36]]

解释:

  • arr_2d 的形状是 (2, 3),即 2 行 3 列。
  • arr_1d 的形状是 (3,),即 1 行 3 列。
  • arr_1d 被广播到与 arr_2d 的每一行相同,形成 [[10, 20, 30], [10, 20, 30]],然后进行加法运算。

3. 维度不同的数组运算

如果两个数组的维度数不同,NumPy 会在较小的数组左侧添加 1,然后尝试进行广播。

arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
arr_1d_col = np.array([[10], [20]])result = arr_2d + arr_1d_col
print(result)

输出:

[[11 12 13][24 25 26]]

解释:

  • arr_2d 的形状是 (2, 3)
  • arr_1d_col 的形状是 (2, 1),即两行一列。
  • arr_1d_col 被广播到与 arr_2d 的列数匹配,形成 [[10, 10, 10], [20, 20, 20]],然后进行加法运算。

4. 广播失败的情况

如果两个数组在某个维度上的大小不相同,且其中一个数组的大小不为 1,NumPy 就无法进行广播,会报错。

arr_1 = np.array([[1, 2], [3, 4]])
arr_2 = np.array([1, 2, 3])result = arr_1 + arr_2  # 这将报错

报错信息:

ValueError: operands could not be broadcast together with shapes (2,2) (3,)

解释:

  • arr_1 的形状是 (2, 2)arr_2 的形状是 (3,)
  • 这两个数组在第二个维度上无法匹配(23 不同),且没有维度的大小为 1,因此广播失败。

广播机制的实际应用场景

1. 数据归一化

将数据集的每一列归一化到 [0, 1] 范围内。

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
min_vals = data.min(axis=0)
max_vals = data.max(axis=0)normalized_data = (data - min_vals) / (max_vals - min_vals)
print(normalized_data)

输出:

[[0.   0.   0.  ][0.5  0.5  0.5][1.   1.   1.  ]]

2. 批量计算欧氏距离

计算一组点与给定点之间的欧氏距离。

points = np.array([[1, 2], [3, 4], [5, 6]])
origin = np.array([0, 0])distances = np.sqrt(np.sum((points - origin)**2, axis=1))
print(distances)

输出:

[2.23606798 5.         7.81024968]

总结

广播机制的核心要点:

  1. 自动扩展:通过广播机制,NumPy 可以自动扩展数组来匹配形状进行运算。
  2. 简洁高效:避免了显式地调整数组形状,提高了代码可读性和性能。
  3. 广播规则:理解广播的三条规则可以帮助你快速判断数组是否可以进行广播运算。

掌握广播机制可以帮助你在数据分析和科学计算中写出更简洁、更高效的代码。希望本文能帮助你深入理解并灵活应用 NumPy 广播机制!

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

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

相关文章

Day28两个数组的交集

给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 class Solution{public int[] intersection(int[] nums1, int[] nums2) {Set<Integer> set new HashSet<>();for (int i :…

VRRP的知识点总结及实验

1、VRRP VRRP(Virtual Router Redundancy Protocol&#xff0c;虚拟路由器冗余协议)既能够实现网关的备份&#xff0c;又能解决多个网关之间互相冲突的问题&#xff0c;从而提高网络可靠性。 2、VRRP技术概述&#xff1a; 通过把几台路由设备联合组成一台虚拟的“路由设备”…

DP协议:概括

来了来了&#xff01;&#xff01;&#xff01; 开始之前扯点概念&#xff0c;知道DP好在哪里&#xff0c;以及看到它的发展趋势&#xff0c;才知道我们为什么有学习的必要。 DP的优势 DisplayPort&#xff08;DP&#xff09;协议作为一种专为数字音频和视频传输设计的高速串行…

Ant Design Vue 中 Tree 组件复选框修改样式

一、问题 最近需要实现一个业务需求&#xff0c;要修改勾选框中的颜色&#xff0c;默认勾选框的颜色是蓝色&#xff0c;现在需要变成绿色。 1、官网示例&#xff1a; 2、业务需求&#xff1a; 3、具体实现&#xff1a; HTML 部分代码 <template><div class"s…

【JavaWeb后端学习笔记】登录校验(JWT令牌技术、Interceptor拦截器、Filter过滤器)

登录校验 1、JWT令牌技术1.1 JWT令牌介绍1.2 Java代码生成与校验JWT令牌 2、Filter过滤器2.1 Filter过滤器的简单实现2.2 配置拦截路径2.3 Filter接口中的三个方法&#xff1a;2.4 Filter过滤器登录校验2.5 过滤器链 3、Interceptor拦截器3.1 拦截器(Interceptor)的简单实现3.2…

SpringBoot的Bean类三种注入方式(附带LomBok注入)

SpringBoot的Bean类三种注入方式&#xff08;附带LomBok注入&#xff09; 在 Spring Boot 中&#xff0c;Bean 的注入方式主要包括构造函数注入&#xff08;Constructor Injection&#xff09;、字段注入&#xff08;Field Injection&#xff09;以及 Setter 方法注入&#xf…

Linux系统下常用资源查看

一、查看CPU使用率 top 命令 top命令可以看到总体的系统运行状态和cpu的使用率 。 %us&#xff1a;表示用户空间程序的cpu使用率&#xff08;没有通过nice调度&#xff09; %sy&#xff1a;表示系统空间的cpu使用率&#xff0c;主要是内核程序。 %ni&#xff1a;表示用户空间且…

Flutter提示错误:无效的源发行版17

错误描述 Flutter从3.10.1 升级到3.19.4&#xff0c;在3.10.1的时候一切运行正常&#xff0c;但是当我将Flutter版本升级到3.19.4后&#xff0c;出现了下方的错误 FAILURE: Build failed with an exception.* What went wrong: Execution failed for task :device_info_plus:…

java+ssm+mysql学生信息管理系统

项目介绍&#xff1a; 使用javassmmysql开发的学生信息管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、教师、学生角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff08;可以新增管理员&#xff09;&#xff1b;专业管理&…

PCB设计规范

过孔设计 过孔盖油工艺&#xff08;也成为连塞带印&#xff09;&#xff1a;常规工艺、免费工艺&#xff0c;无特殊情况也建议使用此工艺。过孔大小建议直径在0.3mm-0.5mm之间。最省钱&#xff0c;效果最好。 非金属化槽孔 PCB制造商在加工非金属化槽孔时通常采用锣刀加工。最…

【C语言】42道大厂笔试题目(选择题)

本篇博客给大家带来的是一些大厂笔试题目&#xff0c;题目难度&#xff1a;简单&#xff0c;适合小白快速入手C语言部分的大厂笔试难度。 &#x1f41f;&#x1f41f;文章专栏&#xff1a;C语言 &#x1f680;&#x1f680;若有问题评论区下讨论&#xff0c;我会及时回答 ❤❤欢…

设置笔记本同时连接内外网

原理&#xff1a;通过笔记本和手机相连&#xff0c;实现双网卡功能能。笔记本连接内网wifi、同时手机端开启usb网络共享&#xff0c;笔记本就有了两个网&#xff0c;然配置那个访问外网&#xff0c;那个访问内网。 1.笔记本wifi连接内网wifi 2.手机端共享网络。 手机打开 -【…

JVM类加载三步解读: 双亲委派模型如何维护Java生态

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! &#x1f649;Java是面向对象编程&#xff0c;一切皆对象。这些对象是如何从一堆代码变成程序中的一部分&#xff1f;Java虚拟机&#xff08;JVM&#xff09;在这个过程中扮演了至关重要的角色。当你的代码通…

青海摇摇了3天,技术退步明显.......

最近快手上的青海摇招聘活动非常火热&#xff0c;我已经在思考是否备战张诗尧的秋招活动。开个玩笑正片开始&#xff1a; 先说一下自己的情况&#xff0c;大专生&#xff0c;20年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c…

SpringBean生命周期之PostConstruct、PreDestroy详解

在Spring框架中&#xff0c;Bean的生命周期是一个复杂的过程&#xff0c;涉及多个阶段&#xff0c;其中PostConstruct和PreDestroy注解在Bean的初始化和销毁阶段发挥着重要作用。以下是对这两个注解的深入理解&#xff1a; 一、PostConstruct注解 定义与来源 PostConstruct源自…

基于阿里云Ubuntu22.04 64位服务器Java及MySql环境配置命令记录

基于阿里云Ubuntu22.04 64位服务器Java及MySql环境配置命令记录 Java 23 离线环境配置MySql 环境配置MySQL常用命令 Java 23 离线环境配置 下载 Ubuntu环境下 Java 23 离线包 链接: java Downloads. 在Linux环境下创建一个安装目录 mkdir -p /usr/local/java将下载好的jdk压缩…

逆向分析:利用标志位进行爆破破解

信息收集 查程序编写信息 所用工具Detect It Easy Delphi编写&#xff0c;根据此信息选择DeDeDark进行反编译进一步收集可用信息 反编译程序进行信息收集 所用工具DeDeDark 载入要分析的主程序点击[开始处理]进行分析 注&#xff1a;主程序即软件主题程序(长见软件安装完毕…

再次回首人生的四个部分

概述 今日部门聚餐&#xff0c;讲了明年的业绩组成及如何实现&#xff0c;更多的从侧面反应了群体人之间的差异点。 人生四部分 这里说的可能不是太全面&#xff0c;但是是突感而发&#xff0c;再此总结而已。 出身 能力 选择 机遇 我们无法左右自己的出身&#xff0c;…

C语言蓝桥杯2023年省赛真题

文章目录 持续更新中...第一题题目描述输入格式输出格式样例输出提示 2 第二题题目描述 第三题题目描述输入格式输出格式样例输入样例输出 第四题题目描述输入格式输出格式样例输入样例输出提示 第四题题目描述输入格式输出格式样例输入样例输出提示 第五题题目描述输入格式输出…

【工具变量】上市公司企业研发不确定性数据(2013-2023年)

一、测算方式&#xff1a;参考顶刊《中国工业经济》孙薇&#xff08;2023&#xff09;老师的做法&#xff0c;本文从专利的申请与授权的视角出发&#xff0c;以企业当年申请的发明专利中最终未被授权的比例度量研发不确定性 &#xff08;uc&#xff09;。这是因为&#xff0c;相…