MXNet中NDArray中的广播运算条件

问题

《动手学深度学习》(By Aston Zhang, Mu Li, Zachary C.Lipton, Alexander J.Smola)中介绍NDArray中的广播运算时并没有说清楚广播运算的条件。但是,此运算在此书后续代码中广泛使用,结合网络上的搜索,特别详解如下。

详解

情况一:两个形状相同的NDArray按元素运算,不需要广播机制。

情况二:当形状不同时,这两个NDArray按元素运算还有可能进行

条件是:这两个NDArray的形状要“兼容”。所谓“兼容”是指:

为了确定两个形状是否是可兼容的,需要从最后开始往前逐个比较它们的维度(dimensions)大小。比较过程中,如果两者的对应维度相同,或者其中之一(或者全是)等于1,比较继续进行直到最前面的维度。否则,你将看到ValueError错误出现("operands could not be broadcast together with shapes ...")。

当其中之一的形状的维度超出范围(例如,a1 的shape=(2,3,4)而a2的shape=(3,4),当a1的2超出a2范围),此时Numpy将会使用1进行比较(如将a2.shape替换为(1,3,4))直到另一个也超出dim范围。

一旦Numpy确定两者的形状是可兼容的,最终结果的形状就成了每个维度上取两者之间最大的形状尺寸。

举例1

A=nd.arange(3).reshape((3,1))
B=nd.arange(2).reshape((1,2))
A+B可以进行,结果的形状为(3,2)

举例2

a=nd.arange(6).reshape((1,6))
b=nd.arange(8).reshape((8,1))
A+B可以进行,结果的形状为(8,6)

举例3

a=nd.arange(6).reshape((1,6))
b=nd.arange(8).reshape((4,2,1))

A+B可以进行,结果的形状为(4,2,6)

反例

a=nd.arange(6).reshape((3,2))
b=nd.arange(8).reshape((8,1))
A+B不可以进行,抛出错误!

原文地址:https://blog.51cto.com/zhuxianzhong/2412409

时间: 2024-08-06 00:03:15

MXNet中NDArray中的广播运算条件的相关文章

java中的switch用String作为条件

在开发java程序的过程中,我们遇到了条件判断首选就是switch,但是java中的switch功能不支持字符串作为条件.这时我们该怎么办呢? --使用枚举. 一.枚举简单了解 1.enum是一种数据类型. 特殊:是指在枚举中将变量的值一一列出来,变量的值只限于列举出来的值的范围内. 特殊到一般化:enmu 就是我们根据自己业务需要定义的同"String,int"相同的数据类型.同时enum也就是一种类,可以在enum中定义方法,在使用的时候就按照调用类的方式来调用. 2.定义成枚举的

java中自增自减运算与c中自增自减的区别

今天看到java面试宝典里面有一道题目是这样的: 答案是0,我开始也有疑问,后来看到后面说到java的中间缓存变量,后来到网上查了查,终于理解了,是什么意思了.请看下面的代码和解释: package com.wj.demo; public class Test1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int j=0; for(int i=

js中小数的判断和运算

判断小数的方法: if(String(newNum).indexOf(".")>-1){ alert('小数!') }else{ alert("非小数"); } 小数和整数的相加,最简便的方法: function getAmount(){ var proltotal=0; jQuery('.littletotal').each(function(){ // 乘1能转为数字,直接相加会自动调整精度,否则是字符串的连接 var rowtotle2=jQuery(t

MyBatis中动态SQL语句完成多条件查询

http://blog.csdn.net/yanggaosheng/article/details/46685565 MyBatis中动态SQL语句完成多条件查询 <select id="queryEmp"  resultType="cn.test.entity.Emp"> select * from emp where 1=1 <if test="deptNo!=null"> and deptno=#{deptNO} &

在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色

原文:在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色 例如根据学生的年龄来修改,年龄小于18岁的,该行为红色显示,如何做到 解决方法 1: 在你需要加载的键入代码,我一般放在TabControl的selected事件中 ?Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.ApplicationIdle, new Action(方法名)); ? 我个人定义了一个方法 ?for (i

使用MXNet的NDArray来处理数据

使用MXNet的NDArray来处理数据 2018-03-06 14:29 by ☆Ronny丶, 382 阅读, 0 评论, 收藏, 编辑 NDArray.ipynb NDArray介绍 机器学习处理的对象是数据,数据一般是由外部传感器(sensors)采集,经过数字化后存储在计算机中,可能是文本.声音,图片.视频等不同形式.这些数字化的数据最终会加载到内存进行各种清洗,运算操作.几乎所有的机器学习算法都涉及到对数据的各种数学运算,比如:加减.点乘.矩阵乘等.所以我们需要一个易用的.高效的.功

C#中DataTable中的Compute方法使用收集

原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详细内容请看这里“http://msdn2.microsoft.com/zh-cn/library/system.data.datacolumn.expression(VS.80).aspx”.而Filter则是条件过滤器,类似sql的Where条件. DataTable dt = new DataT

Model Builder中Table2Table中字段映射的问题

ArcGIS10中使用过程中,Bug不少.尽管有了SP3,但模型耦合的深层次的应用中还是错误不少.目前只是遇到一个,利用躲避的方法解决一个.例如,从NetCDF中抽出的数据表,必须在内存和数据库中都存在的条件下,Python程序才能运行成功,花了许多时间才得出这样的躲避方法.如下图的抽取计算数据为例,抽出NetCDF的数据表为内存视图,将该内存视图转存为Geodatabase的存储数据表,在没有表映射的条件下总是无法输出字段. 这里实际上可能是ArcGIS10的Bug.如果在制作过程中有具体数据

MAC中Django中runserver提示Can&#39;t connect to local MySQL server through socket &#39;/tmp/mysql.sock错误

好像不止遇到一次,直接Google就可以了,在stackoverflow中就有答案,答案就是你没有开MySQL - -. stackoverflow链接见 http://stackoverflow.com/questions/16325607/cant-connect-to-local-mysql-server-through-socket-tmp-mysql-sock 开启MySQL的命令如下: mysql.server start MAC中Django中runserver提示Can't co