逐轴对连个ndarray进行操作的时候,会隐式的执行broadcast的动作,执行broadcast的动作需要参与操作的两个轴至少满足如下一个条件:
1. 当前的各自轴(长度)相等,(其实无需进行broadcast了)
2. 其中一个轴的长度为1,因此可以进行拷贝扩展
例如:

>>> x = np.random.rand(8, 1, 6, 1)
>>> y = np.random.rand(7, 1, 5)
>>> (x*y).shape         # 8, 1(拓展), 6,        1(拓展)#    7,        1(拓展), 5# 8, 7,        6,        5

更详尽的讨论参见之前的一篇文章numpy中的broadcasting机制。

theano variables vs shared variables

默认情况下,tensor中的matrix/tensor3/tensor4不可进行broadcast的。theano的所有shared variable也是不可进行broadcast的,但可以改变它们的shape
也可以在创建shared variable时显示指定其是否可以broadcastable。

xval = np.array([[1, 2, 3], [4, 5, 6]])# (2, 3), ndim = 2
bval = np.array([[10, 20, 30]])# (1, 3), ndim = 2
xshared = theano.shared(xval)
bshared = theano.shared(bval)
zval = xshared*1./bshared# numpy时,两者是可以进行broadcast的# 右前可知,shared变量不可进行broadcast
print zval.eval()

解决方案:

bshared = theano.shared(bval, broadcastable=(True, False))

此外还有一种特殊情况,一维数组(不论是否是shared类型)都可进行broadcast:

xval = np.array([[1, 2, 3], [4, 5, 6]])# (2, 3), ndim=2
bval = np.array([10, 20, 30])# (3, ), ndim=1
xshared = theano.shared(xval)
bshared = theano.shared(bval)
zval = xshared*1./bshared
zval.eval()
array([[ 0.1 ,  0.1 ,  0.1 ],[ 0.4 ,  0.25,  0.2 ]])

references

[1]Theano and numpy broadcasting

Numpy and Theano broadcasting相关推荐

  1. python科学计算环境配置_ATLAS + NumPy + SciPy + Theano 的Python科学计算环境搭建

    Theano是一个Python库,提供了定义.优化以及评估数学表达式的库,尤其适合处理高维数组.使用Theano能获得和C差不多的处理速度,并且当利用GPU进行计算时,效率要优于CPU上运行的C语言程 ...

  2. numpy中的broadcasting

    Broadcasting 官方文档 参考文档 广播机制应用: numpy.array与scalar 将scalar扩充成array的形状后,进行操作 一般arrays间的广播机制 从最后边的维度开始匹 ...

  3. numpy 中的 broadcasting(广播)机制

    broadcasting,广播,传递,赋值,拷贝: 一定要注意,执行 broadcast 的前提在于,两个 ndarray 执行的是 element-wise(按位加,按位减) 的运算,而不是矩阵乘法 ...

  4. 循环神经网络教程第二部分-用python,numpy,theano实现一个RNN

    作者:徐志强 链接:https://zhuanlan.zhihu.com/p/22289383 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在本部分,我们将会从头 ...

  5. Numpy之Broadcasting

    在使用arrary进行矩阵运算时,有时候会经常遇到两个数组的维度"shape"不一样,这时Numpy会启用Broadcasting 规则,通过该规则可以将较小shape的数组扩展成 ...

  6. Theano 中文文档 0.9 - 7.2.1 起手式 —— 代数

    7.2.1 起手式 -- 代数 译者:Python 文档协作翻译小组,原文:Baby Steps - Algebra. 本文以 CC BY-NC-SA 4.0 协议发布,转载请保留作者署名和文章出处. ...

  7. Theano官方文档的测试和总结(1):安装、基础语法、逻辑斯蒂回归

    http://deeplearning.net/software/theano/NEWS.html 目录 1. Theano的简介和安装 1.1 Theano简介 1.2 Theano安装 2 基础语 ...

  8. numpy 数组 ::_看起来不错,没有麻烦:使用NumPy进行数组编程

    numpy 数组 :: It is sometimes said that Python, compared to low-level languages such as C++, improves ...

  9. Theano 中文文档 0.9 - 7.2.5 循环

    7.2.5 循环 译者:Python 文档协作翻译小组,原文:Loop. 本文以 CC BY-NC-SA 4.0 协议发布,转载请保留作者署名和文章出处. Python 文档协作翻译小组人手紧缺,有兴 ...

最新文章

  1. php 云技术,什么叫云技术?
  2. Hadoop Hive替换自带的derby数据库为MySQL具体步骤
  3. codeforces 758 A
  4. UIAlertControl的使用对比与UIAlertView和UIActionSheet
  5. 初学css常用属性整理
  6. 个人记账软件测试初学者,好用的个人记账软件
  7. vue中使用iview修改Cascader的默认数据
  8. gatk过滤_GATK使用方法详解(相关参数和参考文件说明)
  9. 苹果x屏幕失灵乱跳_苹果手机屏幕失灵怎么办?成都苹果维修点教你轻松处理!...
  10. 女孩们,请别到职场卖萌,甘当不专…
  11. 力扣周赛 第281场 Java题解
  12. web前端期末大作业 HTML+CSS+JavaScript仿唯品会购物商城网页设计实例 企业网站制作
  13. 二叉树的深度和平衡二叉树的深度
  14. 固话号码认证有什么好处?固话号码认证有什么作用?
  15. 海康API返回Json值获取
  16. 从零开始,申请开通微信小程序全流程
  17. XNA-2D碰撞-使用像素偵測
  18. 【TWS API 问题3】盈透证券的TWS API使用过程中如何实现一个订单成交之后自动取消其他的订单?
  19. Unity 环境变量设置
  20. Safari即将支持WebRTC

热门文章

  1. CDH中hue的oozie调度流程shell
  2. MySQL为啥不用平衡二叉树_MySQL的索引,为什么是B+而不是平衡二叉树
  3. matlab运行为什么要选中代码,性能 – 为什么(在MATLAB中)这个代码更快?
  4. mysql的压缩包,mysql 压缩包安装
  5. #if defined和#if !defined的含义
  6. 剑指offer面试题35. 复杂链表的复制(DFS)(深拷贝)
  7. static_cast, dynamic_cast, const_cast,reinterpret_cast探讨
  8. C#设计模式---模板方法模式(Template Method Pattern)
  9. Cortex M3/M4 学习摘要(二)
  10. CI控制器调用内部方法并载入相应模板的做法