numpy 中的 broadcasting(广播)机制
来源:互联网 发布:java 写入excel模板 编辑:程序博客网 时间:2024/06/15 05:37
broadcasting,广播,传递,赋值,拷贝;
一定要注意,执行 broadcast 的前提在于,两个 ndarray 执行的是 element-wise(按位加,按位减) 的运算,而不是矩阵乘法的运算,矩阵乘法运算时需要维度之间严格匹配。(且矩阵乘法,np.dot(A, B) 如果维度不匹配,提示的错误不会是 broadcast,而是 aligned)
我们常常会看到 Python 编译器会提示如下类型的错误:
- 1
- 1
那么如何理解这里的broadcast
呢,matlab中并无对等的概念?
broadcasting
机制的功能是为了方便不同shape
的array(numpy库的核心数据结构)进行数学运算。
举一个简单的例子,实现对一个1-d array的每一个元素乘以2:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
broadcast的做法是:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
这也就解释了之前常常令人困惑的(3, )
不同于(3, 1)
(表shape)。
我们来看更为一般的broadcasting rules
:
当操作两个array
时,numpy会逐个比较它们的shape(构成的元组tuple),只有在下述情况下,两arrays
才算兼容:
- 相等
- 其中一个为1,(进而可进行拷贝拓展已至,shape匹配)
1. 举例
举例说明:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
再来看一些不能进行broadcast
的例子:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
我们再来看一些具体的应用:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
当执行xx+y时,numpy是如何进行copy扩展的呢?
- 1
- 2
- 3
- 1
- 2
- 3
也即对xx重复5列,对y重复4行
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
2. 补充
还有一点,注意和矩阵乘法的区别,当有一维数组参与运算时:
- 一维数组置于矩阵乘法的左部,被视为一个行向量;
- 一维数组置于矩阵乘法的右部,被视为一个列向量;
- (这样和一个一维数组作用无论在左还是在右)矩阵乘法运算结束得到的向量仍是一维数组。
- 1
- 2
- 3
- 1
- 2
- 3
0 0
- numpy 中的 broadcasting(广播)机制
- numpy 中的 broadcasting(广播)机制
- Python的numpy中的 broadcasting(广播)机制
- Numpy中的广播(Broadcasting)
- Numpy中的广播(Broadcasting)
- Numpy中的广播(Broadcasting)
- Numpy中的广播(Broadcasting)
- numpy中的通用函数(ufunc)的广播机制(Broadcasting)依赖于数组shape属性
- Python库numpy中的Broadcasting机制解析
- Numpy中的Broadcasting
- Numpy快速入门教程(二):数据类型,数组计算,Broadcasting机制
- numpy broadcasting
- numpy Broadcasting
- numpy中的广播(broadcast)
- numpy广播机制
- Numpy的广播机制
- 广播,多播(Broadcasting, Multicasting)
- 广播,多播(Broadcasting, Multicasting)
- 趣味程序设计_出售金鱼
- python3.x 中文输入到文件中乱码
- Hello World!
- CSS3 background介绍
- Android 开发规范(updating)
- numpy 中的 broadcasting(广播)机制
- [暴力 单调栈] BZOJ 2228 [Zjoi2011]礼物(gift)
- ARM编译器
- leetcode
- Gson使用详情
- 基于Jetson TX1的caffe环境搭建
- 二叉树的顺序存储和链式存储结构(java实现)
- 七个习惯
- 深入分析java web技术内幕----读书笔记(二)