0
点赞
收藏
分享

微信扫一扫

4. PyTorch中的数据类型—张量

小_北_爸 2022-04-29 阅读 47

本文中所有代码的前提是调用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个张量

 

 

 

举报

相关推荐

0 条评论