什么是广播

我们都知道,Numpy中的基本运算(加、减、乘、除、求余等等)都是元素级别的,但是这仅仅局限于两个数组的形状相同的情况下。

可是大家又会发现,如果让一个数组加1的话,结果时整个数组的结果都会加1,这是什么情况呢?

x = np.arange(3)
x
Out[225]: array([0, 1, 2])
x + 1
Out[226]: array([1, 2, 3])

其实这就是广播机制:Numpy 可以转换这些形状不同的数组,使它们都具有相同的大小,然后再对它们进行运算。给出广播示意图:

广播示例

接下来我们通过实际代码验证下:

a = np.arange(0, 40, 10)
a.shape
Out[228]: (4,)
a
Out[229]: array([ 0, 10, 20, 30])
b = np.array([0,1,2])
b.shape
Out[231]: (3,)
b
Out[232]: array([0, 1, 2])
a = a[:, np.newaxis] # 转换a的维度(形状)
a.shape
Out[234]: (4, 1)
a
Out[235]:
array([[ 0],
[10],
[20],
[30]])
a + b
Out[236]:
array([[ 0, 1, 2],
[10, 11, 12],
[20, 21, 22],
[30, 31, 32]])

 明显可以看出,相加前 a 的形状为 (4, 1), b 的形状为 (3, ), a+b 的结果的形状为(4, 3)。计算时,变换结果与上图类似,这里来详细介绍下:

a
Out[237]:
array([[ 0],
[10],
[20],
[30]])
a2 = np.array(([i * 3 for i in a.tolist()])) # 会先将a转化为a2
a2
Out[239]:
array([[ 0, 0, 0],
[10, 10, 10],
[20, 20, 20],
[30, 30, 30]])
b
Out[240]: array([0, 1, 2])
b2 = np.array([b.tolist()] * 4) # 再将b转为b2
b2
Out[242]:
array([[0, 1, 2],
[0, 1, 2],
[0, 1, 2],
[0, 1, 2]])
a2 + b2
Out[243]:
array([[ 0, 1, 2],
[10, 11, 12],
[20, 21, 22],
[30, 31, 32]])

  

最新文章

  1. bzoj1800[Ahoi2009]fly 飞行棋 暴力枚举
  2. ubuntu下解析udt数据包
  3. 【翻译】Kinect v1和Kinect v2的彻底比较
  4. recent.css常用的页面初始化样式
  5. php中simplexml_load_string使用实例
  6. php笔记之GD库图片创建/简单验证码
  7. Design Pattern Memo 备忘录设计模式
  8. 如何选择合适的PHP开发框架
  9. 【BZOJ 3626】 [LNOI2014]LCA【在线+主席树+树剖】
  10. boost学习目录
  11. MarkdownPad
  12. 清晰讲解SQL语句中的内连接,通用于Mysql和Oracle,全是干货哦
  13. [模板] 匈牙利算法&&二分图最小字典序匹配
  14. 施工测量中Cad一些非常有用的插件
  15. Programming Assignment 3: Pattern Recognition
  16. 微信小程序选择并上传图片
  17. PTA 大炮打蚊子   (15分)
  18. android学习-数据存储(一)-----SQLite源码分析
  19. ArcGIS10.3+Oracle12C+ArcGIS Server10.3安装布署(之二)
  20. (windows下)tomcat优化--内存,并发.缓存三方面优化

热门文章

  1. 【原】Java学习笔记023 - 字符串缓冲区_正则表达式
  2. Filebeat使用内置的mysql模块收集日志存储到ES集群并使用kibana存储
  3. SQLServer修改表数据
  4. #019 还未搞明白的C语言问题
  5. 一 Struts2 开发流程
  6. 如何展开Linux Memory Management学习?
  7. WinForm程序完全退出总结
  8. centos7内网源站建设
  9. jquery.filter() 实现元素前3个显示,其余的隐藏
  10. 开发工具IntelliJ IDEA的安装步骤及首次启动和创建项目