4-1 张量的结构操作

张量结构操作主要包括:张量创建,索引切片,维度变换,合并分割。

一、创建张量

张量创建的许多方法和numpy中创建array的方法很像。以下记录一些比较常用的操作:

(1)直接采用torch.tensor创建,指定数据类型为torch.float

image.png

(2)torch.arrage()函数

image.png

(3)torch.range()函数

image.png

(4)torch.linspace()

image.png

(5)torch.zeros()

image.png

(6)torch.ones() 和 torch.zeros_like()

image.png

(7)torch.fill_()

image.png

(8)正态随机分布

image.png

(8)特殊矩阵

image.png

二、索引切片

规则切片:

例如,采用均匀随机分布创建一个矩阵:
image.png
第0行:
image.png
倒数第一行:
image.png
第1行至第3行:
image.png
第1行至最后一行,第0列到最后一列每隔两列取一列:
image.png
可以使用索引和切片修改部分元素:
image.png
省略号可以表示多个冒号:
image.png

不规则切片:

以上切片方式相对规则,对于不规则的切片提取,可以使用torch.index_select, torch.take, torch.gather, torch.masked_select.
考虑班级成绩册的例子,有4个班级,每个班级5个学生,每个学生7门科目成绩。可以用一个4×5×7的张量来表示。
image.png
torch.floor()返回具有 input 元素下限的新张量,最大整数小于或等于每个元素。例如:
image.png

torch.index_select()

抽取每个班级第0个学生,第2个学生,第4个学生的全部成绩:
image.png
抽取每个班级第0个学生,第2个学生,第4个学生的第1门课程,第3门课程,第6门课程成绩
image.png

torch.take()

image.png

torch.masked_select()

image.png
以上这些方法仅能提取张量的部分元素值,但不能更改张量的部分元素值得到新的张量。
如果要通过修改张量的部分元素值得到新的张量,可以使用torch.where,torch.index_fill 和 torch.masked_fill

torch.where()

torch.where可以理解为if的张量版本
image.png

torch.index_fill()

image.png

torch.masked_fill()

image.png

三、维度变换

torch.view()

image.png

torch.reshape()

torch.reshape 可以改变张量的形状。
image.png
image.png
image.png

torch.squeeze()

如果张量在某个维度上只有一个元素,利用torch.squeeze可以消除这个维度。
image.png

torch.unsqueeze()

torch.unsqueeze的作用和torch.squeeze的作用相反。
image.png

torch.transpose()

torch.transpose可以交换张量的维度,torch.transpose常用于图片存储格式的变换上。
如果是二维的矩阵,通常会调用矩阵的转置方法 matrix.t(),等价于 torch.transpose(matrix,0,1)。
image.png

四、合并分割

可以用torch.cat方法和torch.stack方法将多个张量合并,可以用torch.split方法把一个张量分割成多个张量。
torch.cat和torch.stack有略微的区别,torch.cat是连接,不会增加维度,而torch.stack是堆叠,会增加维度。

torch.cat()

第0维:
image.png
第1维:
image.png

torch.stack()

第0维:
image.png
第1维:
image.png

torch.split()

torch.split是torch.cat的逆运算,可以指定分割份数平均分割,也可以通过指定每份的记录数量进行分割。
image.png

image.png
参考:https://github.com/lyhue1991/eat_pytorch_in_20_days

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值