Numppy | 10 广播(Broadcast)

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

下面的图片展示了数组 b 如何通过广播来与数组 a 兼容。

4x3 的二维数组与长为 3 的一维数组相加,等效于把数组 b 在二维上重复 4 次再运算

如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

import numpy as np 

a = np.array([1,2,3,4])
b = np.array([10,20,30,40])
c = a * b
print (c)

输出结果为:

[ 10  40  90 160]

当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制

import numpy as np 

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

输出结果为:

[[ 1  2  3]
 [11 12 13]
 [21 22 23]
 [31 32 33]]
import numpy as np

a = np.array([[0, 0, 0],
              [10, 10, 10],
              [20, 20, 20],
              [30, 30, 30]])
b1 = np.array([1, 2, 3])
b2 = np.tile(b1, (4, 1))

print(b2)
print(‘\n‘)
print(a + b2)

输出结果为:

[[1 2 3]
[1 2 3]
[1 2 3]
[1 2 3]]

[[ 1 2 3]
[11 12 13]
[21 22 23]
[31 32 33]]


广播的规则:

  • 让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。
  • 输出数组的形状是输入数组形状的各个维度上的最大值。
  • 如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
  • 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。

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

  • 数组拥有相同形状。
  • 当前维度的值相等。
  • 当前维度的值有一个是 1。

若条件不满足,抛出 "ValueError: frames are not aligned" 异常。

原文地址:https://www.cnblogs.com/Summer-skr--blog/p/11690757.html

时间: 2024-10-06 21:31:14

Numppy | 10 广播(Broadcast)的相关文章

ACM/ICPC 之 数据结构-邻接表+BFS(TshingHua OJ-无线广播Broadcast)

这道题中若能够构成互不干扰的区域,其构成的图其实就是汉密尔顿路(Hamilton road),因此如果能够观察出来可以直接转化为汉密尔顿路的存在性证明,即便不能观察,我相信ACMer也能转化为BFS问题,这道题是一道很好的图论问题,对考察自己图论的基本功很有帮助. 无线广播(Broadcast) 描述 某广播公司要在一个地区架设无线广播发射装置.该地区共有n个小镇,每个小镇都要安装一台发射机并播放各自的节目. 不过,该公司只获得了FM104.2和FM98.6两个波段的授权,而使用同一波段的发射机

自定义广播Broadcast

/*发送一个自定义广播 * 指定广播目标Action * 可通过Intent携带消息 * 发送广播消息 */ private void sendMyBroadcast(){ Intent intent = new Intent("MyReceiver_Action"); intent.putExtra("msg", "发送自定义的广播"); sendBroadcast(intent); } //自己写的一个广播类 public class Bro

品茗论道说广播(Broadcast内部机制讲解)(上)

侯 亮 1 概述 我们在编写Android程序时,常常会用到广播(Broadcast)机制.从易用性的角度来说,使用广播是非常简单的.不过,这个不是本文关心的重点,我们希望探索得再深入一点儿.我想,许多人也不想仅仅停留在使用广播的阶段,而是希望了解一些广播机制的内部机理.如果是这样的话,请容我斟一杯红茶,慢慢道来. 简单地说,Android广播机制的主要工作是为了实现一处发生事情,多处得到通知的效果.这种通知工作常常要牵涉跨进程通讯,所以需要由AMS(Activity Manager Servi

品茗论道说广播(Broadcast内部机制讲解)(下)

下面我们来看,递送广播动作中最重要的processNextBroadcast(). 3.2 最重要的processNextBroadcast() 从processNextBroadcast()的代码,我们就可以看清楚前面说的“平行广播”.“有序广播”和“动态receiver”.“静态receiver”之间的关系了. 我们在前文已经说过,所有的静态receiver都是串行处理的,而动态receiver则会按照发广播时指定的方式,进行“并行”或“串行”处理.能够并行处理的广播,其对应的若干recei

Android 7.0 ActivityManagerService(5) 广播(Broadcast)相关流程分析

本篇博客旨在分析Android中广播相关的源码流程. 一.基础知识 广播(Broadcast)是一种Android组件间的通信方式. 从本质上来看,广播信息的载体是intent.在这种通信机制下,发送intent的对象就是广播发送方,接收intent的对象就是广播接收者. 在Android中,为广播接收者定义了一个单独的组件:BroadcastReceiver. 1 BroadcastReceiver的注册类型 在监听广播前,要将BroadcastReceiver注册到系统中. Broadcas

广播——broadcast

广播机制简介 广播分类 标准广播 有序广播 接收系统广播 动态注册监听网络变化 静态注册实现开机启动 注意耗时操作 发送自定义广播 发送有序广播 发送有序广播步骤 优先级 使用本地广播 出现原因 本地广播使用 优点 广播优先级 基本原则 ordered 广播 非 ordered 广播 只能动态接受广播源码分析 目的 参考httpblogcsdnnetgemmemarticledetails8859493 广播注册过程分析 静态注册 Receiver 的流程 动态注册 Receiver 的流程 广

《Android深入透析》之广播(Broadcast)

摘要 在android中,Broadcast作为四大组件之一,被广泛的应用在android程序之间的数据传递.举一个大家都比较熟悉的例子来说明.在车上的时候大家都有收听广播的习惯,广播电台通过发送不同频率的信号,然后大家通过将各自频率调成和电台相同的频率,就可以接受到广播内容了.在android中的广播其实是和这个是一样的效果的. 1.     概述 在android中,Broadcast作为四大组件之一,被广泛的应用在android程序之间的数据传递.举一个大家都比较熟悉的例子来说明.在车上的

laravel 5.5 广播(broadcast)的配置及使用

借助Laravel Broadcasting你可以使用上时下很热的Websocket技术. 注意:请务必使用较新版本的 Laravel.Laravel在最近几个版本进行过比较大的重构,比如路由从 app\Http\routes.php 拆分为到 routes 目录下的多个文件,包括广播在内的各个附加组件也都进行了重构并正式写入文档.所以网上有些教程(特别是入门教程)可能是根据旧版本来写的,容易让你迷惑.当安装完Laravel后执行以下命令查看Laravel版本 php artisan --ver

android基础:广播BroadCast简单案例

运行效果 string.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">TestBroadcast</string> <string name="param_input">请输入发送参数</string> <string name="