Pytorch学习笔记

第一周学习笔记整理(2)

Lesson 2.张量的索引、分片、合并以及维度调整

import torch
import numpy as np
#一维张量索引
t1 = torch.arange(1, 11)
print(t1[0].item()) #注:张量索引出来的结果还是零维张量, 而不是单独的数。要转化成单独的数,需要使用item()方法。
t1[1: 8]  #冒号分隔,表示对某个区域进行索引,也就是所谓的切片
t1[1: 8: 2]  # 索引其中2-9号元素,左包含右不包含,且隔两个数取一个
t1[1: : 2]   # 从第二个元素开始索引,一直到结尾,并且每隔两个数取一个
t1[: 8: 2]   # 从第一个元素开始索引到第9个元素(不包含),并且每隔两个数取一个
t2 = torch.arange(1, 10).reshape(3, 3)
t2[0, 1]      # 表示索引第一行、第二个(第二列的)元素
t2[0, ::2]    # 表示索引第一行、每隔两个元素取一个
t2[0, [0, 2]]             # 索引结果同上
t2[::2, ::2]              # 表示每隔两行取一行、并且每一行中每隔两个元素取一个
t2[[0, 2], 1]              # 索引第一行、第三行、第二列的元素
t3 = torch.arange(1, 28).reshape(3, 3, 3)
t3[1, 1, 1]          # 索引第二个矩阵中,第二行、第二个元素
t3[1, ::2, ::2]      # 索引第二个矩阵,行和列都是每隔两个取一个
t3[:: 2, :: 2, :: 2]      # 每隔两个取一个矩阵,对于每个矩阵来说,行和列都是每隔两个取一个
indices = torch.tensor([1, 2])
torch.index_select(t1, 0, indices) #在index_select函数中,第二个参数实际上代表的是索引的维度。对于t1这个一维向量来说,由于只有一个维度,因此第二个参数取值为0,就代表在第一个维度上进行索引
t = torch.arange(6).reshape(2, 3)
te = t.view(3, 2)              # 构建一个数据相同,但形状不同的“视图”
#PyTorch中的.view()方法。该方法会返回一个类似视图的结果,该结果和原张量对象共享一块数据存储空间,并且通过.view()方法,还可以改变对象结构,生成一个不同结构,但共享一个存储空间的张量。当然,共享一个存储空间,也就代表二者是“浅拷贝”的关系,修改其中一个,另一个也会同步进行更改。

张量的分片函数

t2 = torch.arange(12).reshape(4, 3)
tc = torch.chunk(t2, 4, dim=0)           # 在第零个维度上(按行),进行四等分
#out
#(tensor([[0, 1, 2]]),
# tensor([[3, 4, 5]]),
# tensor([[6, 7, 8]]),
# tensor([[ 9, 10, 11]]))
torch.split(t2, 2, 0)           # 第二个参数只输入一个数值时表示均分,第三个参数表示切分的维度
torch.split(t2, [1, 3], 0)           # 第二个参数输入一个序列时,表示按照序列数值进行切分,也就是1/3分
torch.split(t2, [1, 1, 1, 1], 0)  
torch.cat([a, b])                  # 按照行进行拼接,dim默认取值为0
torch.cat([a, b], 1)               # 按照列进行拼接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值