| 运算 | 函数 | 
|---|---|
| 加 | add | 
| 减 | sub | 
| 乘 | mul | 
| 除 | div | 
| 矩阵相乘 | matmul | 
| 次方 | pow | 
| 平方根及其倒数 | sqrt 和 rsqrt | 
| 向下/向上取整 | floor / ceil | 
| 分离出整数/小数 | trunc / frac | 
| 近似解四舍五入 | round | 
| 裁剪 | clamp | 
1、矩阵元素的加减乘除
注意是矩阵间对应位置元素进行加减乘除
add 和 +
a = torch.rand(3,4)
b = torch.rand(4)a+b
torch.add(a,b)
# 直接用符号或add函数效果一样,且tensor有broadcast自动扩展b的shape为(3,4)torch.all(torch.eq(a+b,torch.add(a,b))

sub 和 -

mul 和 *

div 和 /

2、矩阵相乘 matmul和@
三种方式:
1、torch.mm
 2、torch.matmul
 3、运算符@
#其中,mm只支持2d的tensor,不建议使用。直接用matmul或者运算符@

以神经网络中的线性层为例:
 将shape为(4,784)的x降维度到(4,512)
x = torch.rand(4,784)w = torch.rand(512,784)
#pytorch的习惯写法是out维度在前,要@运算的时候将w转置即可(x@w.t()).shape

 多维情况下的matmul
 依旧只对后两维矩阵进行相乘,并且还是有broadcast自动扩展机制
a = torch.rand(4, 3, 28, 64)
b = torch.rand(4, 3, 64, 32)
torch.matmul(a,b).shapeb = torch.rand(4, 1, 64, 32)
torch.matmul(a,b).shape

3、次方运算
① 次方 pow 或 **
 a.pow(x)
 #a为张量,x为次方数
a = torch.full([2,2],3)
a.pow(2)
a**2

 ② 平方根 sqrt
 a.sqrt()相当于 a**(0.5)
aa = a**2aa.sqrt()aa**(0.5)

 ③rsqrt
 a.rsqrt() 是a.sqrt()结果的倒数
 也可以是a.sqrt()**(-1)
aa.rsqrt()aa.sqrt()**(-1)

 总结:所有的次方运算都可以用pow()或运算符**实现
4、近似解运算
例子:
 a=torch.tensor(3.14)
 a.floor()向下取整得到3
 a.ceil()向上取整得到4
 a.trunc()分离出整数部分3
 a.frac()分离出小数部分0.14
 a.round()四舍五入得到3
 
5、裁剪运算
用的较多的是梯度裁剪
 
grad = 15 * torch.rand(2,3)
grad.max()gradgrad.clamp(10)
#只有一个参数10表示限定grad中元素数值最小为10grad.clamp(9,10)
#限制最小为9,最大为10
