本文中所有代码的前提是调用PyTorch包
import torch
1. 张量的理解
标量:0维张量;向量:1维张量;矩阵:2维张量。扩展至高维数据,统称为张量。
2. PyTorch的张量创建
2.1 列表类型转变为张量类型
torch.tensor([1,2,3,4])
2.2 PyTorch包内置方法创建
torch.rand(l,m,n) # [l,m,n]维的向量,内部元素在[0,1]区间分布
torch.randn(l,m,n) # [l,m,n]维的向量,内部元素在[0,1]区间服从标准正态分布
torch.zeros(l,m,n) # [l,m,n]维的向量,内部元素全是0
torch.ones(l,m,n) # [l,m,n]维的向量,内部元素全是1
torch.eye(n) # [n,n]维的单位矩阵
2.3 通过已有张量来创建新的张量
已知t为一个张量,那么
torch.zeros_like(t) # 生成一个形状和t张量相同,但内部元素全是0的新张量
torch.ones_like(t) # 生成一个形状和t张量相同,但内部元素全是1的新张量
torch.rand_like(t) # 生成一个形状和t张量相同,但内部元素在[0,1]区间分布的新张量
torch.randn_like(t) # 生成一个形状和t张量相同,但内部元素在[0,1]区间标准正态分布的新张量
3. 张量的常用操作
3.1 查看张量的维度
t.shape // t.size() # 返回张量t的维度[l,m,n]
3.2 索引与切片—— 与列表类似
正向索引从0开始,逆向索引从-1开始;
t[i,j,k] // t[i][j][k] # 截取第(i,j,k)的元素
3.3 张量的运算
3.3.1 张量中的加法
a + b # 张量中对应位置的元素相加
torch.add(a,b) # 张量中对应位置的元素相加
3.3.2 张量中的减法
a - b # 张量中对应位置的元素相减
torch.sub(a,b) # 张量中对应位置的元素相减
3.3.3 张量中的乘法
a * b # 对应位置的元素相乘
orch.mul(a,b) # 对应位置的元素相乘
a @ b # 矩阵乘法
torch.mm(a,b) # 矩阵乘法
torch.matmul(a,b) # 矩阵乘法
3.3.3 张量中的除法
a / b # 对应位置的元素相除
torch.div(a,b) # 矩阵除法
3.4 张量的变换
已知t是一个[l,m,n]维的张量,那么
3.4.1 张量的维度互换
t.transpose(index1,index2) # 将[l,m,n]索引index1和index2的维度互换
t.t() # 矩阵的转置(只适用2位矩阵张量)
3.4.2 张量的拼接
torch.cat([a,b],dim=index) #将a,b两个张量按[l,m,n]中索引index维度来拼接在一起
3.4.3 张量的维度变换
t.view(l*m,n) # 将3维[l,m,n]转换为2维[l*m,n]
t.reshape(l*m,n) # 将3维[l,m,n]转换为2维[l*m,n]
3.4.4 张量维度的增加
t.unsqueeze(index) # 在列表[l,m,n]索引index的位置增加维度
注:index看成索引,也可以存在逆向索引。
3.4.5 张量维度的删除
t.squeeze(index) # 在列表[l,m,n]索引index的维度,但该维度的size必须为1.
3.4.6 张量维度的扩展
t.expand(i,j,k) # 对[l,m,n]中size=1的维度变换对应的[i,j,k]
若i,j,k为-1,表示该维度的size不变。
3.4.7 张量的分割
t.split(i, dim=index) # 将张量按照i的指定长度在index维进行拆分
t.chunk(i, dim=index) # 将张量在index维进行拆分成i个张量