博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
张量(tensor)的广播
阅读量:5122 次
发布时间:2019-06-13

本文共 1059 字,大约阅读时间需要 3 分钟。

在使用numpy 对张量(数组)进行操作时,两个形状相同的张量进行加减等运算很容易理解,那么不同形状的张量之间的运算是通过广播来实现的。广播实际上很简单,但是弄清楚是也花了不小功夫,这里记录一下。

广播的目的是将两个不同形状的张量 变成两个形状相同的张量,即先对小的张量添加轴(使其ndim与较大的张量相同),在把较小的张量沿着新轴重复(使其shape与较大的相同)

广播的的限制条件为:两个张量的 trailing dimension(从后往前算起的维度)的轴长相等 或 其中一个的长度为1

import numpy as npa=np.arange(0,12)a=a.reshape(3,4)b=np.arange(0,4)print(a)#[[ 0  1  2  3]#  [ 4  5  6  7]# [ 8  9 10 11]]print(b)#[0 1 2 3]print(a.shape)#(3, 4)print(b.shape)#(4,)print(a.ndim)#2print(b.ndim)#1a+b          #array([[ 0,  2,  4,  6],#       [ 4,  6,  8, 10],#       [ 8, 10, 12, 14]])

上述 a+b 的计算过程等价为:

(1)先将b添加一个轴 即

(2)在将b沿着 新加的轴进行重复  

b.reshape(1,4)#array([[0, 1, 2, 3]])c=np.array([b,b,b])#array([[0, 1, 2, 3],#      [0, 1, 2, 3],#      [0, 1, 2, 3]])a+c#array([[ 0,  2,  4,  6],#       [ 4,  6,  8, 10],#       [ 8, 10, 12, 14]])

 

其他几个例子

x=np.arange(0,12)x=x.reshape(3,4,1)xy=np.arange(0,8)y=y.reshape(4,2)yq=x+yq.shape#(3,4,2)
x=np.arange(0,12)x=x.reshape(3,4,1)xz=np.arange(0,2)z=z.reshape(1,2)zq=x+zq.shape#(3,4,2)

x  :      y z  x+y    x+z  

 

 

 

最后放上几个图片便于理解

 

转载于:https://www.cnblogs.com/Assist/p/11158028.html

你可能感兴趣的文章
Java同步锁——lock与synchronized 的区别【转】
查看>>
洛谷-校门外的树-数组
查看>>
Python--网络编程-----文件传输简单版本
查看>>
CF 208E. Blood Cousins [dsu on tree 倍增]
查看>>
趣谈面试(一)
查看>>
Quart2D setNeedsDisplay
查看>>
设计模式之策略设计模式
查看>>
Sql server 从一个表中获取数据更新到另一个表中
查看>>
JS继承的实现方式 原型 原型链 prototype和_proto_的区别
查看>>
[bzoj3622] 已经没有什么好害怕的了
查看>>
Objective-c 中 nil, Nil, NULL和NSNull的区别
查看>>
解决Ubuntu编译内核uImage出现问题“mkimage” command not found - U-Boot
查看>>
NOIP2018退役记
查看>>
第三次作业-功能测试
查看>>
(C++)浅谈using namespace std
查看>>
Http协议与生命周期
查看>>
Filter过滤器
查看>>
HTML5新标签在低版本浏览器中兼容性Checklist (hacks and issues)
查看>>
Laravel框架使用的一些注意细节(一)
查看>>
android-------非常好的图片加载框架和缓存库(Picasso)
查看>>