NumPy 广播(Broadcast)

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

如果两个数组 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]]

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

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

实例

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]) bb = np.tile(b, (4, 1)) print(a + bb)

输出结果为:

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

广播的规则:

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

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

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

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

最新文章

  1. POJ 2411 Mondriaan's Dream
  2. None
  3. java新版中唤醒指定线层对象
  4. Qss样式(二)
  5. 前端笔试题 JS部分
  6. 【ASP.NET Web API教程】2.3.5 用Knockout.js创建动态UI
  7. JDBC数据源 使用JNDI连接池实现数据库的连接
  8. Mac下持久化路由配置
  9. Linux环境编程导引
  10. maven项目,httpclient jar包冲突
  11. Linux 下安装FastDFS v5.08 的php扩展
  12. 把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog
  13. Linux文件和目录常用操作命令(40个)
  14. JS----click3种方法
  15. IDEA项目搭建四——使用Mybatis实现Dao层
  16. LNMP(Linux+Nginx+MySQL+PHP)centos6.4安装
  17. spring MVC 后台token防重复提交解决方案
  18. CS100.1x-lab1_word_count_student
  19. Generate Parentheses - LeetCode
  20. exce族函数详解

热门文章

  1. 转载:官方Caffe-windows 配置与示例运行
  2. [Python]查询mysql导出结果至Excel并发送邮件
  3. JS 函数(arguments、箭头函数、bind)
  4. Netty socket.io 启用Epoll 模式异常
  5. 修改页面中显示出需要修改的数据(包括select选择框复显示)
  6. Zookeeper 基本应用及盲点
  7. python异常处理方法
  8. HG255D刷机OPENWRT笔记
  9. Android中使用Lambda表达式开发
  10. [重点]delphi删除部分字符串(不区分大小写)