numpy 中的 broadcasting 理解
broadcast 是 numpy 中 array 的一个重要操作。
首先,broadcast 只适用于加减。
然后,broadcast 执行的时候,如果两个 array 的 shape 不一样,会先给“短”的那一个,增加高维度“扩展”(broadcasting),比如,一个 2 维的 array,可以是一个 3 维 size 为 1 的 3维 array。
类似于: shape(1,3,2) = shape(3,2)
最后,比较两个 array(扩展后的),按照 dimension 从低到高,比较每一个维度的 size 是否满足下面两个条件之一:
1. 相等
2. 其中一个为 1
所以,举例,下列 array 是否可以进行 broadcast:
1. shape(4, 3) 与 shape(3,) :shape(3) 可以 broadcast 为 shape(1, 3),那么,从低到高: d0(3 === 3), d1(其中一个为 1)。结论,可以,结果的为 shape(4, 3)
2. shape(6,5,4,3, 与 shape(5, 4, 3):shape(5, 4, 3) 可以 broadcast 为 shape(1,5,4,3),那么,从低到高:d0( 3 === 3), d1(4 === 4), d2(5===5),d3(其中一个为 1)。结论,可以,结果为 shape(6, 5, 4, 3)。
3. shape(2,3) 与 shape(5,4,3):shape(2,3) 可以 broadcast 为 shape(1, 2, 3),那么,从低到高:d0( 3 == 3), d1(4!=2)。结论,不能进行 broadcast。
4. shape(4,1) 与 shape(5):shape(5)可以 broadcast 为 shape(1,5),那么,从低到高: d0( 其中一个为 1), d1(其中一个为 1)。结论,可以进行 broadcast,结果为 shape(4, 5) 。
broadcast 之后的运算是怎样呢?举例说明:
a = [ [0,1,2,], [4,5,6,] ] b = [1,2,3,] a + b = [ [1,3,5,], [5,7,9,] ]
或可自己运行下面代码观察
import numpy as np a = np.arange(12)
b = a.reshape(3,2,2) c = np.arange(4)
d = c.reshape(2, 2) e = np.arange(2) print d+b print e+b
还有下面一种特殊情况,即扩展低维度为 1 的情况下:
import numpy as np a = np.arange(3) b = np.arange(5) a = a[:, np.newaxis] print a
print b print a+b
基本上是只在对应的 dimension 进行加减,扩展的部分不参与运算。
numpy 中的 broadcasting 理解的更多相关文章
- 对numpy中shape的理解
from:http://blog.csdn.net/by_study/article/details/67633593 环境:Windows, Python3.5 一维情况: >>> ...
- [开发技巧]·Numpy中对axis的理解与应用
[开发技巧]·Numpy中对axis的理解与应用 1.问题描述 在使用Numpy时我们经常要对Array进行操作,如果需要针对Array的某一个纬度进行操作时,就会用到axis参数. 一般的教程都是针 ...
- 关于NumPy中数组轴的理解
参考原文链接(英文版):https://www.sharpsightlabs.com/blog/numpy-axes-explained/:中文版:https://www.jianshu.com/p/ ...
- 理解numpy中ndarray的内存布局和设计哲学
目录 ndarray是什么 ndarray的设计哲学 ndarray的内存布局 为什么可以这样设计 小结 参考 博客:博客园 | CSDN | blog 本文的主要目的在于理解numpy.ndarra ...
- Numpy中的广播机制,数组的广播机制(Broadcasting)
这篇文章把numpy中的广播机制讲的十分透彻: https://jakevdp.github.io/PythonDataScienceHandbook/02.05-computation-on-arr ...
- Numpy中Meshgrid函数介绍及2种应用场景
近期在好几个地方都看到meshgrid的使用,虽然之前也注意到meshgrid的用法.但总觉得印象不深刻,不是太了解meshgrid的应用场景.所以,本文将进一步介绍Numpy中meshgrid的用法 ...
- Python Pandas与Numpy中axis参数的二义性
Stackoverflow.com是程序员的好去处,本公众号将以pandas为主题,开始一个系列,争取做到每周一篇,翻译并帮助pandas学习者一起理解一些有代表性的案例.今天的主题就是Pandas与 ...
- Python numpy 中常用的数据运算
Numpy 精通面向数组编程和思维方式是成为Python科学计算大牛的一大关键步骤.——<利用Python进行数据分析> Numpy(Numerical Python)是Python科学计 ...
- numpy中array数组对象的储存方式(n,1)和(n,)的区别
资料:https://stackoverflow.com/questions/22053050/difference-between-numpy-array-shape-r-1-and-r 这篇文章是 ...
随机推荐
- Linux中查找当前目录下占用空间最大的前10个文件
du命令 计算出单个文件或者文件夹的磁盘空间占用 -a或--all:包含全部的文件系统: --block-size=<区块大小>:以指定的区块大小来显示区块数目: -h或--human-r ...
- elastalert邮件报警
https://www.cnblogs.com/zhaijunming5/p/7943933.html
- (第5篇)避免协作冲突--简单易接入的Zookeeper
摘要: 众所周知,分布式的系统协作服务很难有让人满意的产品.这些协作服务产品很容易陷入一些诸如竞争选择条件或者死锁的陷阱中.那Zookeeper又是怎么解决这个问题的呢? 博主福利 给大家推荐一套ha ...
- Python中List的append引用赋值问题处理
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...
- P2152 [SDOI2009]SuperGCD 未完成
辗转相减求a,b的gcd其实可以优化的: 1.若a为偶数,b为奇数:gcd(a,b)=gcd(a/2,b) 2.若a为奇数,b为偶数:gcd(a,b)=gcd(a,b/2) 3.若a,b都是偶数:gc ...
- xhprof扩展安装与使用
目录 一.xhprof扩展安装步骤 二.xhprof的使用 总结 参考资料 一.xhprof扩展安装步骤 xhprof是PHP的一个扩展,最好也直接安装上graphviz图形绘制工具(用于xhprof ...
- hdu-1754 I Hate It【线段树】(求区间最大值)
<题目链接> I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- Android高效内存2:让图片占用尽可能少的内存
Android高效内存:让图片占用尽可能少的内存 一.让你的图片最小化 1.1 大图小图内存使用情况对比 大图:440 * 336 小图:220 * 168 资源目录:xhdpi 小图的高宽都是 ...
- Orleans部署
一.配置指南 1,客户端配置 2,服务端配置 3,典型配置 4,配置.NET垃圾收集 5,SQL系统存储 二.监控 1,运行时监视 2,silo错误代码监测 3,客户端错误代码监测 三.解决部署问题 ...
- 在网站中使用Bing Translator插件翻译文章。
前一阵子给项目增加了翻译的功能,用的是Bing Translator Widget,今天看见有个兄弟写自定义自己的博客,我就尝试着把这个插件加到了自己的博客中.还真的好用.大家先看下效果,觉得好的请继 ...