阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。 希望互相进步谢谢!!
文章目录
- 阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!!
- 1、广播操作
- 2、代码例子最形象
- 阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!!
1、广播操作
其实也比较简单,两个矩阵broadcast后的结果每一维都是两个矩阵中最大的。
按从右往左顺序看两个张量的每一个维度,x和y每个对应着的两个维度都需要能够匹配上。什么情况下算是匹配上了?满足下面的条件就可以:
a.这两个维度每一个维度的大小相等
b. 某个维度 一个张量有,一个张量没有。那numpy会自动补1
c.某个维度 一个张量有,一个张量也有但大小是1。
为何要右对齐,因为最右边的维度最低。举个例子
(1,2,3)其中3是最低的维度,2其次,1最高
两个张量维度从右往左看,如果出现两个张量在某个维度位置上面,维度大小不相等,且两个维度大小没有一个是1,那么这两个张量一定不能进行广播
2、代码例子最形象
# Compute outer product of vectors
v = np.array([1,2,3]) # v has shape (3,)
w = np.array([4,5]) # w has shape (2,)
# To compute an outer product, we first reshape v to be a column
# vector of shape (3, 1); we can then broadcast it against w to yield
# an output of shape (3, 2), which is the outer product of v and w:
print(np.reshape(v, (3, 1)) * w)
#为啥这里要reshape((3,1)),因为(3,) 和 (2,)无法进行广播
#1、先维度(3,1)与(2, )比较,发现后者是1维,所以前面补1,使(2, )1维 成 (1, 2)二维,从而与前者维度一样
#2、从低维开始比直到高维结束(即从右往左比,例如(1,2)中2代表低维,1代表高维)。
# 若比较时两者相等或者其中为1,才能broadcasting,否则报错
# 低维:(3, 1)中的1和(1, 2)中的2比较,满足其中为1,1变2,即(3, 1) --> (3, 2)
# 高维:此时变成了(3, 2)中的3和(1, 2)中的1比较。也满足,故(1, 2) --> (3, 2),最终变换结果如下:
# 1 1 4 5
# 2 2 4 5
# 3 3 4 5
没看懂的再看看这篇文章:
《Pytorch中的广播机制(Broadcast)》
码字不易,谢谢点赞!!!
码字不易,谢谢点赞!!!
码字不易,谢谢点赞!!!