Numpy 广播域

news/2024/4/26 7:55:07/文章来源:https://blog.csdn.net/weixin_59131972/article/details/129707166

NumPy广播(Broadcast),广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。

不同形状指的是,大小不同当然不是指的维度,但是要求数组各维度的长度相同

例如:

arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(arr)
arr2 = np.array([1,2,3])

arr是4*3的二维数组 arr2 是1*3的一维数组 ,二维数组中的一维数组 长度是3 ,而一维数组的长度也是三,所以只有满足这样的条件才可以进行计算。

如果想要知道他们是如何进行计算的请看下面的图片

arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(arr)
arr2 = np.array([1,2,3])
print(arr2)
print(arr*arr2)

我们知道arr 和arr 数组的维度是不相同的,如果在普通的运算中,如果我们想对它们元素到元素之间进行相乘或者相加减,显然是不可能的,但是在numpy中是可以对不同维度的数组进行乘除加减操作的,因为numpy中的数组具有广播功能。低维度的数组会扩展到和多维数组相同大小

我们可以这样认为,arr2是一维数组,它和二维数组arr 进行乘法运算,arr2 中的每一元素依次会和二维数组的每一个元素相乘。但是对广播来说不能这样简单认为:

arr2

1

2

3

arr2经过广播后

1

2

3

1

2

3

1

2

3

1

2

3

arr数组

0

2

6

3

8

15

6

14

24

9

20

22

广播操作具有延伸性,它会将低维度的数组,延伸成为和高维度一样大小的数组,然后在对他们进行乘除加减操作。

有的朋友会问,二维数组乘以一维数组它们得到的结果是多大维度的。

显然结果是二维数组,如果测试该数组的维度,请将该数组点上一个 ndim 方法名 arr.ndim

NumPy广播的规则

  • 让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。

  • 输出数组的形状是输入数组形状的各个维度上的最大值。

刚才看到 输入数组 arr 是 4 x 3 arr2 是 1 x 3 ,输出数组 result 是 4 x 3 最大值是不是 4 x 3 啊

  • 如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。

arr 是二维,arr2是一维,我们需要拿arr中的一维数组和arr2比较观察他们的长度(行元素个数)是否相同,或者arr2中只有一个元素,才能进行计算否则会报错

两个输入数组对应维度的元素个数相同:

arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr2 = np.array([2,3,4])

低维度的元素个数(长度)为 1

arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr2 = np.array([2])

报错案例: 低维度的数组多一个元素或者少一个元素都不行,但排除元素个数为1的可能性

低维度数组的元素少一个
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr2 = np.array([2,3])
报错提示:
ValueError: operands could not be broadcast together with shapes (4,3) (2,) 
低维度数组的元素多一个
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr2 = np.array([2,3,4,5])
报错提示:ValueError: operands could not be broadcast together with shapes (4,3) (4,) 
正确 : 低维度数组维度的值(元素个数)为1个
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr2 = np.array([3])
result = arr*arr2
结果:
[[ 1  2  3]            arr[ 4  5  6][ 7  8  9][10 11 12]][3]                    arr2[[ 3  6  9]           result[12 15 18][21 24 27][30 33 36]]
  • 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。

简单理解:对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:

  • 数组拥有相同形状。

  • 当前维度的值相等。

  • 当前维度的值有一个是 1。

numpy中的数组具有广播性,广播性就是延伸性,比较低的维度数组会延伸到和维度较大的数组一样的大小,这里的低维度指的是一维数组,如果是其它维度就要做操作的两个数组的维数相同和各维度的长度是否相同不同则不可以进行广播操作。numpy只针对一维数组且各维度的长度要相同,或者其中一个数组只有一个元素。

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

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

相关文章

ICG-MAL,吲哚菁绿-马来酰亚胺,CAS:2143933-81-5,科研级别试剂

ICG-MAL,吲哚菁绿-马来酰亚胺 中文名称:吲哚菁绿-马来酰亚胺 英文名称:ICG-MAL 性状:粉末或固体 CAS:2143933-81-5 分子式:C51H56N4O6S 分子量:853.09 溶剂:溶于二氯甲烷等常规性有机溶…

【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(7)

目录 写在前面: 题目:P1596 [USACO10OCT]Lake Counting S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述: 输入格式: 输出格式: 输入样例: 输出样例: 解题思路: …

【技巧】十大深度学习技巧和经验总结

✅作者简介:在读博士,伪程序媛,人工智能领域学习者,深耕机器学习,交叉学科实践者,周更前沿文章解读,提供科研小工具,分享科研经验,欢迎交流!📌个人…

RocketMQ重复消费问题的原因

文章目录 概览消息发送异常时重复发送消费消息抛出异常消费者提交offset失败服务端持久化offset失败主从同步offset失败重平衡清理长时间消费的消息总结概览 消息发送异常时重复发送 首先,我们来瞅瞅RocketMQ发送消息和消费消息的基本原理。 如图,简单说一下上图中的概念: …

责任链设计模式的一次实践

业务需求 框架:SSH 需要对全部接口的响应体 ResponseBody 做 XSS 拦截 解决方案 在全局拦截器中检测 Response Body 是否有非法字符,如果有,就抛出异常。 实际上,在 struts2 的拦截器上,我发现 即使修改了 action…

yum安装docker以及安装指定版本docker

Docker是Docker.Inc公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发,并遵从Apache 2.0协议。通过分层镜像标准化和内核虚拟化技术,Docker使得应用开发者和运维工程师可以以统一的方式跨平台发布应用,并且以几乎没有…

在Java中,使用HttpUtils实现发送HTTP请求

HTTP请求,在日常开发中,还是比较常见的,今天给大家分享HttpUtils如何使用。 阅读本文,你将收获: 简单总结HTTP请求常用配置;JavaLib中HttpUtils如何使用;如何封装HTTP请求工具类。 第一部分&a…

【Unity入门】3D物体

【Unity入门】3D物体 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)物体移动旋转缩放 (1)物体移动 在上一篇文章【Unity入门】场景视图操作我们学会了在场景中创建3…

开源供应链管理系统 S2B2B2C系统方案及源码输出

连锁供应链的管理,包括供应链的仓库管理、业务员管理、门店订货管理、门店管理、门店前端拓客管理,相关的功能结构图如下: 整个方案含PC、小程序端,源码! 功能列表: 仓库管理:包括仓库布局、库存…

Fabric系列 - TLS身份验证

排序节点(Orderer)要启用TLS身份验证 对等节点(Peer)要启用TLS的身份验证 Gossip 消息传递 gossip 层使用 TLS 绑定来验证连接另一端的对等方的身份。 通过 Peer 节点 TLS 层来处理点对点消息的安全性,不需要使用签名…

OpenAI创始人:GPT-4的研究起源和构建心法

OneFlow编译 翻译|杨婷、贾川、徐佳渝 三十年前,互联网(Web 1.0)时代开启。人们只能在笨重的电脑上用鼠标点击由HTML编写的网页文本,随后开始支持插入图片,可以上传视频,于是有了网络新闻、搜索…

一次小破站JS代码审计出XSS漏洞思路学习

今天看了小破站一个大佬的分析,感觉思路很有意思,感兴趣的xdm可以到大佬视频下提供的链接进行测试(传送门)这类社交平台的XSS漏洞利用起来其实危害是特别大的,利用XSS能在社交平台上呈现蠕虫式的扩散,大部分…

【人人都能读标准】10. 作用域链与闭包

本文为《人人都能读标准》—— ECMAScript篇的第10篇。我在这个仓库中系统地介绍了标准的阅读规则以及使用方式,并深入剖析了标准对JavaScript核心原理的描述。 在8.执行环境我们说过,由ECMAScript代码创建的执行上下文会有一个词法环境的组件&#xff0…

【Effective C++详细总结】第四章 设计与声明

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:C/C知识点 📣专栏定位:整理一下 C 相关的知识点,供大家学习参考~ ❤️如果有收获的话,欢迎点赞👍…

Flink-转换算子

基本转换算子 map(映射) filter(过滤) flatMap(扁平映射) 聚合算子 keyBy(按键分区) 简单聚合 reduce(归约聚合) UDF介绍 函数类 富函数类 数据源读入数据之后,我们就可…

Neodynamic EPLPrinter SDK 2.0 for .NET Crack

Neodynamic EPLPrinter Emulator SDK for .NET Standard V2.0 添加对 FK&#xff08;删除表单&#xff09;、FR&#xff08;检索表单&#xff09;和 FS&#xff08;存储表单&#xff09;表单相关命令的支持。 21月 2023&#xff0c; 10 - 34&#xff1a;<>新版本 特征…

如何在24小时内让你的网站跻身谷歌前列?

在当今互联网时代&#xff0c;拥有一个排名靠前的网站对于企业来说非常重要&#xff0c;因为这意味着更多的流量和更高的曝光率。 而谷歌&#xff08;Google&#xff09;是全球最受欢迎的搜索引擎之一&#xff0c;因此在谷歌的搜索结果中排名靠前非常重要。 那么如何在24小时…

tomcat服务器前端部署【Tomcat Manager、思路分析】

问题描述 当前需要我进行前端代码的部署&#xff0c;但是我忘记了这个系统对应的部署位置&#xff0c;但是隐约记得好像是通过tomcat部署的。 然后当时为了方便部署&#xff0c;我们打开了Tomcat Manager 以下是基于Tomcat Manager的&#xff0c;没有打开的需要前往tomcat下载…

详解:企业知识管理的制作步骤!

随着信息技术的快速发展&#xff0c;企业面临着海量的信息和知识&#xff0c;如何管理和利用这些信息和知识&#xff0c;已经成为企业发展的重要问题。知识管理是一种管理方法和技术&#xff0c;旨在帮助企业有效地管理和利用知识资产&#xff0c;提高企业的创新能力和竞争力。…

【CSS】浮动 ② ( 浮动语法简介 | 文字环绕效果 | 左浮动 | 右浮动 )

文章目录一、浮动语法简介1、语法说明2、没有浮动的效果3、左浮动的效果4、右浮动的效果5、右浮动 外边距效果二、完整代码示例一、浮动语法简介 1、语法说明 为 元素 设置了 浮动 CSS 属性 , 可以实现 : 元素标签 不再受 标准流 控制 ; ( 块级元素 , 行内元素 , 行内块元素 …