广播(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" 异常。

最新文章

  1. Hadoop集群的启动顺序
  2. 一些Asp.Net面试题答案
  3. ferret32位安装
  4. jquery实现点击上移到顶部功能(转)
  5. SpringMVC 架构
  6. ASP.NET本质论第二章应用程序对象学习笔记1
  7. 09.VMWare虚拟机copy后网卡不是eth0解决办法
  8. Redis的简单介绍及在Windows下环境搭建
  9. javaScript解决Form的嵌套
  10. C#基础-Func,Action
  11. mysql 区间锁 对于没有索引 非唯一索引 唯一索引 各种情况
  12. nodejs端口被占用。
  13. Plsql工具单步调试 存储过程或是 函数(oracle数据库)-留着自己用的
  14. pthread_t结构的定义
  15. 打开excel2007文档时显示“excel无法打开文件~$book.xltm”
  16. 正则表达式判断ip地址
  17. video字幕无法显示,video视频在google中无法控制快进
  18. Win10图片打开方式没有“Windows照片查看器”,如何找回?
  19. vue(2)—— vue简单语法运用,常用指令集
  20. JAVA中使用LOG4J记录日志

热门文章

  1. 【题解】Luogu P5468 [NOI2019]回家路线
  2. 爬虫框架之selenium
  3. 【LeetCode】387. First Unique Character in a String
  4. 如何通过 IntelliJ IDEA 来提升 Java8 Stream 的编码效率
  5. 排序算法Java代码实现(一)—— 选择排序
  6. JavaScript入门(一)
  7. Win10安装IIS并配置ASP.NET 4.0
  8. 第一阶段:Java基础 1.JAVA开发介绍---2. JVM、JRE、JDK之间的关系
  9. java基础小练习,1-打印一百次(1~10)的随机数,2-固定一个随机数(1~100),然后猜出他,3-定义以指定格式打印集合(ArrayList类型作为参数),使用{}括起来,使用@代替,分隔每个元素
  10. Java打印日历表