pytorch张量操作
张量的数据类型
数据类型 | CPU tensor | GPU tensor |
---|---|---|
32位浮点型 | torch.FloatTensor | /.cuda./ |
64位浮点型 | torch.DoubleTensor | /.cuda./ |
16位浮点型 | torch.HalfTensor | /.cuda./ |
8位无符号整型 | torch.ByteTensor | /.cuda./ |
8位有符号整型 | torch.CharTensor | /.cuda./ |
16位有符号整型 | torch.ShortTensor | /.cuda./ |
32位有符号整型 | torch.IntTensor | /.cuda./ |
64位有符号整型 | torch.LongTensor | /.cuda./ |
- torch中默认的数据类型是32位浮点型,可以通过**torch.set_default_tensor_type()**函数设置默认的数据类型
张量的生成
torch.tensor()
一般将python的列表转换为张量的时候,用小写的tensor这个函数。其中.size()可以看张量的尺寸, .numel()可以看元素个数, .requires_grad指定张量是否需要计算梯度
torch.Tensor()
创建一个2×3的张量。torch.Tensor(2,3)
torch.ones_like()/torch.zeros_like()
创建一个和指定张量维度一样的全一或者全零张量
张量和numpy数据的相互转换
将numpy数组转化为Pytorch张量,可以使用torch.as_tensor()函数和torch.from_numpy()函数。
.numpy()函数即可转化为numpy数组。
随机数生成张量
- 随机数种子函数:torch.manual_seed()
- 正态分布函数:torch.normal(mean = , std = )
- 在[0, 1]区间上生成均匀分布的张量:torch.rand() 括号里直接跟尺寸就行,不用再加括号
- 生成0~n的随机整数。打乱序列:torch.randperm(n)
- torch.arange(start = ,end = ,step = )
- 生成固定数量的等间隔张量:torch.linspace(start = ,end = ,step = )
- 全零/全一/单位/填充/空张量:torch.zeros(), torch.ones(), torch.eye(), torch.full((),fill_value =), torch.empty
张量的操作
torch.reshape
改变输入张量的形状
torch.unsqueeze()
在张量的指定维度插入新的维度得到维度提升的张量。
B = torch.unsqueeze(A,dim = )
torch.squeeze()
可以移除指定或者所有维度大小为1的维度,从而得到维度减小的张量
B = torch.squeeze(A,dim = )
.expend()/.expend_as()
对张量的维度进行拓展,从而对张量的形状大小进行修改。例如A是一个2×3的张量,A.expand(3,-1)就把A变成一个每一个元素位置都是一个2×3的张量合起来是一个6×3的张量。.expand_as()就是按某个张量的尺寸进行扩展。
.repeat()
根据指定的形状进行重复填充,得到新的张量。
拼接与拆分
拼接的两种方式,.cat()函数和.stack()函数
.cat()函数可以将多个张量在指定的维度进行拼接,拼接之后维度不会增加。
.stack()函数也可以将多个张量在指定的维度进行拼接,拼接之后维度会增加。
np.vstack() 按垂直方向(行顺序)堆叠数组构成一个新的数组(1,3) (1,3)->(2,3)
np.hstack() 按水平方向(列顺序)堆叠数组构成一个新的数组(1,3) (1,3)->(1,6)
拆分的两种方式,chunk()函数和.split()函数
.chunk()函数可以将张量分割成特定数量的块。
.split()函数可以将张量分成特定数量的块的同时指定每个块的大小。D1, D2, D3 = torch.split(D, [1,2,3],dim=1)
张量的计算
- torch.equal() 判断两个张量是否具有相同的形状和元素
- torch.t()计算矩阵的转置
- torch.matmul() 输出两个矩阵的乘积
- torch.inverse()计算矩阵的逆
- torch.trace() 计算矩阵的迹
- torch.max()/torch.argmax()/torch.min()/torch.argmin() 计算最大值/最大值位置/最小值/最小值位置
- torch.sort()默认为升序排列,在输出结果的同时还会输出对应值在原始位置的索引。descending=True,设置为降序排列
- torch.topk()计算张量中取值大小排前k的数值和数值位置
- torch.kthvalue() 计算张量中取值大小为第k小的数值和数值位置
- torch.mean() 根据指定的维度计算均值
- torch.sum() 根据指定的维度求和
- torch.cumsum() 根据指定的维度计算累加和
- torch.median() 根据指定的维度计算中位数
- torch.cumprod() 根据指定的维度计算累乘积
- torch.std() 根据指定的维度计算标准差