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 理解的更多相关文章

  1. 对numpy中shape的理解

    from:http://blog.csdn.net/by_study/article/details/67633593 环境:Windows, Python3.5 一维情况: >>> ...

  2. [开发技巧]·Numpy中对axis的理解与应用

    [开发技巧]·Numpy中对axis的理解与应用 1.问题描述 在使用Numpy时我们经常要对Array进行操作,如果需要针对Array的某一个纬度进行操作时,就会用到axis参数. 一般的教程都是针 ...

  3. 关于NumPy中数组轴的理解

    参考原文链接(英文版):https://www.sharpsightlabs.com/blog/numpy-axes-explained/:中文版:https://www.jianshu.com/p/ ...

  4. 理解numpy中ndarray的内存布局和设计哲学

    目录 ndarray是什么 ndarray的设计哲学 ndarray的内存布局 为什么可以这样设计 小结 参考 博客:博客园 | CSDN | blog 本文的主要目的在于理解numpy.ndarra ...

  5. Numpy中的广播机制,数组的广播机制(Broadcasting)

    这篇文章把numpy中的广播机制讲的十分透彻: https://jakevdp.github.io/PythonDataScienceHandbook/02.05-computation-on-arr ...

  6. Numpy中Meshgrid函数介绍及2种应用场景

    近期在好几个地方都看到meshgrid的使用,虽然之前也注意到meshgrid的用法.但总觉得印象不深刻,不是太了解meshgrid的应用场景.所以,本文将进一步介绍Numpy中meshgrid的用法 ...

  7. Python Pandas与Numpy中axis参数的二义性

    Stackoverflow.com是程序员的好去处,本公众号将以pandas为主题,开始一个系列,争取做到每周一篇,翻译并帮助pandas学习者一起理解一些有代表性的案例.今天的主题就是Pandas与 ...

  8. Python numpy 中常用的数据运算

    Numpy 精通面向数组编程和思维方式是成为Python科学计算大牛的一大关键步骤.——<利用Python进行数据分析> Numpy(Numerical Python)是Python科学计 ...

  9. numpy中array数组对象的储存方式(n,1)和(n,)的区别

    资料:https://stackoverflow.com/questions/22053050/difference-between-numpy-array-shape-r-1-and-r 这篇文章是 ...

随机推荐

  1. Albert Einstein

    Einstein always appeared to have a clear view of the problems of physics and the determination to so ...

  2. NodeJS学习:搭建私有NPM

    工具 verdaccio nrm pm2 特点 verdaccio 的特点: 不同步拉取npm库,占据大量硬盘,没有硬盘被撑爆的问题: 安装配置极其简单,不需要数据库: 支持配置上游registry配 ...

  3. C# 读取WAV文件(详细)

    class WAVReader { #region RIFF WAVE Chunk private string Id; //文件标识 private double Size; //文件大小 priv ...

  4. JAVA开发工程师面试(1)

    我已经有很长一段时间没有更新博客了,难道是博主我变懒惰了吗?哎,这样可不行啊,我还有好多知识要学习,要和大家分享.以后我需要更加努力,改掉自己的惰性.本人文采不怎么样,只能是把自己所想的说出来,想和大 ...

  5. Android Studio之导出JavaDoc出现编码GBK的不可映射字符

    使用Android Studio导出JavaDoc时,如果在注释中添加了中文,生成时的时候会出现错误: 编码GBK的不可映射字符. 解决的办法是在Other command line argument ...

  6. Zookeeper笔记(一)初识Zookeeper

    为什么需要Zookeeper Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理.Master选举 ...

  7. .NET中JSON序列化(数据集转JSON)

    Json序列化和反序列化指的是:对象序列化为JSON,并可用于从 JSON 反序列化对象 在.net 3.5中已支持JSON,引用命名空间: using System.Web.Script.Seria ...

  8. 065 xftp的使用

    1.xftp 一个基于 MS windows 平台的功能强大的SFTP.FTP 文件传输软件 2.下载安装 *3.在linux上安装服务 sudo yum install vsftp

  9. centos7 安装步骤

    这里选择64位 32位没有找到网卡... 注:这里是网络类型分配,网络类型分配分为三种,Bridge,NAT和Host-Only,大概区别是 1 BRIDGE  桥接:相当于主机和虚拟机连接到同一个h ...

  10. docker容器中安装vim 、telnet、ifconfig, ping命令

    在使用docker容器时,有时候里边没有安装vim,敲vim命令时提示说:vim: command not found,这个时候就需要安装vim,可是当你敲apt-get install vim命令时 ...