Numpy入门[17]——数组广播机制

news2024/11/16 14:26:47

Numpy入门[17]——数组广播机制

参考:

  • https://ailearning.apachecn.org/
  • NumPy广播机制

使用Jupyter进行练习

NumPy 中的广播机制(Broadcast)旨在解决不同形状数组之间的算术运算问题。我们知道,如果进行运算的两个数组形状完全相同,它们直接可以做相应的运算。

但如果两个形状不同的数组呢?它们之间就不能做算术运算了吗?当然不是!为了保持数组形状相同,NumPy 设计了一种广播机制,这种机制的核心是对形状较小的数组,在横向或纵向上进行一定次数的重复,使其与形状较大的数组拥有相同的维度。

import numpy as np
# 正常的加法
a = np.array([[ 0, 0, 0],
              [10,10,10],
              [20,20,20],
              [30,30,30]])
b = np.array([[ 0, 1, 2],
              [ 0, 1, 2],
              [ 0, 1, 2],
              [ 0, 1, 2]])
a + b
array([[ 0,  1,  2],
       [10, 11, 12],
       [20, 21, 22],
       [30, 31, 32]])
# 将 b 的值变成一维的 [0,1,2] 之后的加法
b = np.array([0,1,2])

a + b

array([[ 0,  1,  2],
       [10, 11, 12],
       [20, 21, 22],
       [30, 31, 32]])

image-20220531205124124
结果一样,虽然两个数组的维数不一样,但是 Numpy 检测到 b 的维度与 a 的维度匹配,所以将 b 扩展为之前的形式,得到相同的形状。

对于更高维度,这样的扩展依然有效。

如果我们再将 a 变成一个列向量呢?

a = np.array([0,10,20,30])
a.shape = 4,1
a
array([[ 0],
       [10],
       [20],
       [30]])
b
array([0, 1, 2])
a + b
array([[ 0,  1,  2],
       [10, 11, 12],
       [20, 21, 22],
       [30, 31, 32]])

可以看到,虽然两者的维度并不相同,但是Numpy还是根据两者的维度,自动将它们进行扩展然后进行计算

对于 Numpy 来说,维度匹配当且仅当:

  • 维度相同
  • 有一个的维度是1

匹配会从最后一维开始进行,直到某一个的维度全部匹配为止,因此对于以下情况,Numpy 都会进行相应的匹配:

ABResult
3d array: 256 x 256 x 31d array: 33d array: 256 x 256 x 3
4d array: 8 x 1 x 6 x 13d array: 7 x 1 x 53d array: 8 x 7 x 6 x 5
3d array: 5 x 4 x 31d array: 13d array: 5 x 4 x 3
3d array: 15 x 4 x 131d array: 15 x 1 x 133d array: 15 x 4 x 13
2d array: 4 x 11d array: 32d array: 4 x 3

匹配成功后,Numpy 会进行运算得到相应的结果。

当然,如果相应的维度不匹配,那么Numpy会报错:

a = np.array([0,10,20,30])
print(a.shape)
print(b.shape)
a+b
(4,)
(3,)



---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

Cell In [8], line 4
      2 print(a.shape)
      3 print(b.shape)
----> 4 a+b


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

将 a 转换为列向量,还是可以计算出结果:

# np.newaxis表示增加一个数据宽度为1的维度
a[:,np.newaxis]+b
array([[ 0,  1,  2],
       [10, 11, 12],
       [20, 21, 22],
       [30, 31, 32]])

应用举例:

import matplotlib.pyplot as plt
# 先形成一个 21 乘 21 的网格
x = np.linspace(-.5,.5, 21)
y = x[:, np.newaxis]
# 再计算网格到原点的距离
radius = np.sqrt(x ** 2 + y ** 2)
print(radius)
# 展示一副热度图,将数组表示为一幅图
plt.imshow(radius)
[[0.70710678 0.6726812  0.64031242 0.61032778 0.58309519 0.55901699
  0.53851648 0.52201533 0.50990195 0.50249378 0.5        0.50249378
  0.50990195 0.52201533 0.53851648 0.55901699 0.58309519 0.61032778
  0.64031242 0.6726812  0.70710678]
 [0.6726812  0.6363961  0.60207973 0.57008771 0.54083269 0.51478151
  0.49244289 0.47434165 0.46097722 0.45276926 0.45       0.45276926
  0.46097722 0.47434165 0.49244289 0.51478151 0.54083269 0.57008771
  0.60207973 0.6363961  0.6726812 ]
 [0.64031242 0.60207973 0.56568542 0.53150729 0.5        0.47169906
  0.4472136  0.42720019 0.41231056 0.40311289 0.4        0.40311289
  0.41231056 0.42720019 0.4472136  0.47169906 0.5        0.53150729
  0.56568542 0.60207973 0.64031242]
 [0.61032778 0.57008771 0.53150729 0.49497475 0.46097722 0.43011626
  0.40311289 0.38078866 0.36400549 0.35355339 0.35       0.35355339
  0.36400549 0.38078866 0.40311289 0.43011626 0.46097722 0.49497475
  0.53150729 0.57008771 0.61032778]
 [0.58309519 0.54083269 0.5        0.46097722 0.42426407 0.39051248
  0.36055513 0.3354102  0.31622777 0.30413813 0.3        0.30413813
  0.31622777 0.3354102  0.36055513 0.39051248 0.42426407 0.46097722
  0.5        0.54083269 0.58309519]
 [0.55901699 0.51478151 0.47169906 0.43011626 0.39051248 0.35355339
  0.32015621 0.29154759 0.26925824 0.25495098 0.25       0.25495098
  0.26925824 0.29154759 0.32015621 0.35355339 0.39051248 0.43011626
  0.47169906 0.51478151 0.55901699]
 [0.53851648 0.49244289 0.4472136  0.40311289 0.36055513 0.32015621
  0.28284271 0.25       0.2236068  0.20615528 0.2        0.20615528
  0.2236068  0.25       0.28284271 0.32015621 0.36055513 0.40311289
  0.4472136  0.49244289 0.53851648]
 [0.52201533 0.47434165 0.42720019 0.38078866 0.3354102  0.29154759
  0.25       0.21213203 0.18027756 0.15811388 0.15       0.15811388
  0.18027756 0.21213203 0.25       0.29154759 0.3354102  0.38078866
  0.42720019 0.47434165 0.52201533]
 [0.50990195 0.46097722 0.41231056 0.36400549 0.31622777 0.26925824
  0.2236068  0.18027756 0.14142136 0.1118034  0.1        0.1118034
  0.14142136 0.18027756 0.2236068  0.26925824 0.31622777 0.36400549
  0.41231056 0.46097722 0.50990195]
 [0.50249378 0.45276926 0.40311289 0.35355339 0.30413813 0.25495098
  0.20615528 0.15811388 0.1118034  0.07071068 0.05       0.07071068
  0.1118034  0.15811388 0.20615528 0.25495098 0.30413813 0.35355339
  0.40311289 0.45276926 0.50249378]
 [0.5        0.45       0.4        0.35       0.3        0.25
  0.2        0.15       0.1        0.05       0.         0.05
  0.1        0.15       0.2        0.25       0.3        0.35
  0.4        0.45       0.5       ]
 [0.50249378 0.45276926 0.40311289 0.35355339 0.30413813 0.25495098
  0.20615528 0.15811388 0.1118034  0.07071068 0.05       0.07071068
  0.1118034  0.15811388 0.20615528 0.25495098 0.30413813 0.35355339
  0.40311289 0.45276926 0.50249378]
 [0.50990195 0.46097722 0.41231056 0.36400549 0.31622777 0.26925824
  0.2236068  0.18027756 0.14142136 0.1118034  0.1        0.1118034
  0.14142136 0.18027756 0.2236068  0.26925824 0.31622777 0.36400549
  0.41231056 0.46097722 0.50990195]
 [0.52201533 0.47434165 0.42720019 0.38078866 0.3354102  0.29154759
  0.25       0.21213203 0.18027756 0.15811388 0.15       0.15811388
  0.18027756 0.21213203 0.25       0.29154759 0.3354102  0.38078866
  0.42720019 0.47434165 0.52201533]
 [0.53851648 0.49244289 0.4472136  0.40311289 0.36055513 0.32015621
  0.28284271 0.25       0.2236068  0.20615528 0.2        0.20615528
  0.2236068  0.25       0.28284271 0.32015621 0.36055513 0.40311289
  0.4472136  0.49244289 0.53851648]
 [0.55901699 0.51478151 0.47169906 0.43011626 0.39051248 0.35355339
  0.32015621 0.29154759 0.26925824 0.25495098 0.25       0.25495098
  0.26925824 0.29154759 0.32015621 0.35355339 0.39051248 0.43011626
  0.47169906 0.51478151 0.55901699]
 [0.58309519 0.54083269 0.5        0.46097722 0.42426407 0.39051248
  0.36055513 0.3354102  0.31622777 0.30413813 0.3        0.30413813
  0.31622777 0.3354102  0.36055513 0.39051248 0.42426407 0.46097722
  0.5        0.54083269 0.58309519]
 [0.61032778 0.57008771 0.53150729 0.49497475 0.46097722 0.43011626
  0.40311289 0.38078866 0.36400549 0.35355339 0.35       0.35355339
  0.36400549 0.38078866 0.40311289 0.43011626 0.46097722 0.49497475
  0.53150729 0.57008771 0.61032778]
 [0.64031242 0.60207973 0.56568542 0.53150729 0.5        0.47169906
  0.4472136  0.42720019 0.41231056 0.40311289 0.4        0.40311289
  0.41231056 0.42720019 0.4472136  0.47169906 0.5        0.53150729
  0.56568542 0.60207973 0.64031242]
 [0.6726812  0.6363961  0.60207973 0.57008771 0.54083269 0.51478151
  0.49244289 0.47434165 0.46097722 0.45276926 0.45       0.45276926
  0.46097722 0.47434165 0.49244289 0.51478151 0.54083269 0.57008771
  0.60207973 0.6363961  0.6726812 ]
 [0.70710678 0.6726812  0.64031242 0.61032778 0.58309519 0.55901699
  0.53851648 0.52201533 0.50990195 0.50249378 0.5        0.50249378
  0.50990195 0.52201533 0.53851648 0.55901699 0.58309519 0.61032778
  0.64031242 0.6726812  0.70710678]]





<matplotlib.image.AxesImage at 0x14a9a400250>

​[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qfART7Ax-1670161373970)(17%E6%95%B0%E7%BB%84%E5%B9%BF%E6%92%AD%E6%9C%BA%E5%88%B6_files/17%E6%95%B0%E7%BB%84%E5%B9%BF%E6%92%AD%E6%9C%BA%E5%88%B6_14_2.png)]
​

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

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

相关文章

linux网络编程epoll详解

目录epoll原理解析epoll提供的接口epoll的触发模式epoll原理解析 从socket接收网络数据说起&#xff1a; 1、网络传输中&#xff0c;网卡会把接收到的数据写入内存&#xff0c;网卡向 CPU 发出一个中断信号&#xff0c;操作系统便能得知有新数据到来&#xff0c;再通过网卡中断…

第二证券|行业重磅白皮书发布,超高清视频产业规模剑指3万亿

在5G和超高清交融开展的布景下&#xff0c;下流使用需求有望迸发&#xff0c;超高清视频工业前景可观。 超高清工业规模有望突破3万亿 据报道&#xff0c;12月1日&#xff0c;2022国际显现工业大会分论坛——新式显现超高清主题论坛在成都举行。论坛上&#xff0c;中国电子信息…

文本编辑器vi--常用命令查阅版(记得收藏)

一.为何要学习vi   # 所有的UNIX-like系统都会内置vi文本编辑器&#xff0c;其他的文本编辑器则不一定会存在&#xff1b;   # 很多软件的编辑接口都会主动调用vi&#xff1b;   # vim具有程序编辑的能力&#xff0c;可以主动地以字体颜色辨别语法的正确性&#xff0c;方…

双元科技过会:计划募资6.5亿元,比亚迪和蜂巢能源为主要客户

近日&#xff0c;上海证券交易所披露的信息显示&#xff0c;浙江双元科技股份有限公司&#xff08;下称“双元科技”&#xff09;获得科创板上市委会议通过&#xff08;即IPO过会&#xff09;。接下来&#xff0c;双元科技将提交注册。 据贝多财经了解&#xff0c;双元科技于20…

关于天干地支及其计算

以天干地支计算日期是我国悠良的传统文化&#xff0c;最近在看如何计算人的生辰八字&#xff0c;写了个程序&#xff0c;但是只能算年的干支&#xff0c;月、日的干支计算方法太复杂了&#xff0c;望之只能却步&#xff0c;还是乖乖去查万年历比较好。这里记下关于干支的一些东…

[附源码]Python计算机毕业设计Django框架的资产管理系统设计与实现

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

[附源码]Python计算机毕业设计SSM京津冀区域产学研项目管理信息系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

50、IO流

*学习的难点&#xff1a;要知道在什么情况&#xff0c;该用什么流 补&#xff1a;ANSI码就是gbk码 一、基本概念&#xff1a; 1、什么是文件&#xff1a; 文件是保存数据的地方 2、文件流&#xff1a; 文件在程序中是以流的形式来操作的 &#xff08;1&#xff09;流&am…

XXL-Job海量数据处理-分片任务实战

文章目录一、需求1. 场景2. 分析3. 案例二、什么是分⽚任务2.1. 分⽚路由策略2.2. 海量数据处理2.3. 分片数量2.4. 分片值颁发2.5. 案例三、解决思路3.1. 数据拆分3.2. 分片数量3.3. 分⽚⽅式3.4. 路由策略3.5. 程序实战一、需求 1. 场景 有⼀个任务需要处理100W条数据&#…

【JavaScript 逆向】极验四代无感验证码逆向分析

前言 四代无感验证码相较于滑块验证码区别就是没有底图&#xff0c;一键通过模式&#xff0c;所以不需要轨迹以及计算缺口距离&#xff0c;步骤更少&#xff0c;四代滑块可以阅读&#xff1a;【JavaScript 逆向】极验四代滑块验证码逆向分析 声明 本文章中所有内容仅供学习交…

C++最后一次实验及实验总结

忙活了大半个学期&#xff0c;终于学完了C&#xff0c;虽然很基础&#xff0c;但是至少算是写完了实验&#xff0c;开心~~ 实验一 实验二 实验三 实验四 实验五 实验六 题目一 一、分析下面的程序&#xff0c;写出其运行时的输出结果。上机运行该程序&#xff0c;观察运行…

[附源码]计算机毕业设计ssm新能源电动汽车充电桩服务APP

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

ROS action客户端和服务端通信(Ubuntu )

ROS action客户端和服务端通信 gcusms ROS 一般都是用 service 和 topic 进行数据之间的交互传输&#xff0c;因为这种通信方式无法满数据实时反馈的要求&#xff0c;所以采用 action 动作消息反馈通信机制&#xff08;实时反馈的任务进度&#xff0c;并且可以随时终止运行&am…

用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (6)-在线调试

AWPLC 目前还处于开发阶段的早期&#xff0c;写这个系列文章的目的&#xff0c;除了用来验证目前所做的工作外&#xff0c;还希望得到大家的指点和反馈。如果您有任何疑问和建议&#xff0c;请在评论区留言。 1. 背景 AWTK 全称 Toolkit AnyWhere&#xff0c;是 ZLG 开发的开源…

vuex学习记录

为什么要用vuex 由于vue本身的特点。及页面是由多个组件构成。而组件又呈现一个二叉树状态。然后父向子需要进行通信。那如果是非父子关系&#xff0c;应该如何传值呢&#xff1f; 什么是vuex 专门为vue.js应用程序开发的状态管理模式。它采用集中式存储管理数据&#xff0c…

详解 Go 语言中的 init () 函数

阅读目录Go init 函数的详细说明包初始化Go init 函数的详细说明 初始化每个包后&#xff0c;会自动执行 init&#xff08;&#xff09;函数&#xff0c;并且执行优先级高于主函数的执行优先级。 init 函数通常用于&#xff1a; 变量初始化检查 / 修复状态注册器运行计算 包…

c语言零基础入门(完整版)

1软件下载 官网下载: https://sourceforge.net/projects/orwelldevcpp/ 百度网盘&#xff1a;https://pan.baidu.com/s/1mhHDjO8 提取密码&#xff1a;mken 推荐用百度网盘&#xff0c;官方下载太慢了 开始安装 首先双击打开刚刚下载的软件 点击0k 因为在安装过程中不能使用…

【计算机视觉】图像形成与颜色

图像形成与颜色 光照及阴影 辐射度学 颜色 颜色信息反映了入射光的能量分布与波长&#xff0c;可见光的波长在400nm到760nm之间。 RGB RGB分别代表三个基色&#xff08;R-红色、G-绿色、B-蓝色&#xff09;&#xff0c;如(0,0,0)表示黑色、(255, 255, 255)表示白色。其中2…

TS装饰器bindThis优雅实现React类组件中this绑定

初学React类组件时&#xff0c;最不爽的一点应该就是 this 指向问题了吧&#xff01;初识React的时候&#xff0c;肯定写过这样错误的demo。 import React from react; export class ReactTestClass extends React.Component {constructor(props) { super(props); this.state …