pytorch学习笔记-2

文章目录

    • pytorch-张量的索引与切片
      • 直接索引-indexing
      • 高级索引-连续选取-select first/last N
      • 高级索引-间隔选取-select by steps
      • 高级索引-选取具体索引号-select by specific index
      • 高级索引-掩码选取-select by mask

pytorch-张量的索引与切片

直接索引-indexing

>>>a = torch.rand(4, 3, 28, 28) # a为一组图片数据 shape = (batch_size, channels, high, width)
>>>a.shape
torch.Size([4, 3, 28, 28])

>>>a[0].shape
torch.Size([3, 28, 28])

>>>a[0, 0].shape
torch.Size([28, 28])

高级索引-连续选取-select first/last N

>>>a.shape
torch.Size([4, 3, 28, 28])
>>>a[:2].shape
torch.Size([2, 3, 28, 28]) #取第0和1张图片

>>>a[:2, :1, :, :].shape
torch.Size([2, 1, 28, 28]) # 取前两张图片的第1个通道上的数据
# 等价于
>>>a[:2, :1].shape
torch.Size([2, 1, 28, 28])

>>>a[:2, 1:].shape 
torch.Size([2, 2, 28, 28]) # 取前两张图片的第2和3个通道上的数据

>>>a[:2, -1:].shape
torch.Size([2, 1, 28, 28]) # 取前两张图片的第3个通道上的数据

高级索引-间隔选取-select by steps

语法 含义
all
:n [0, n)
n : [n, END)
n1 :n2 [n1, n2)
n1 :n2 :step 从n1开始,每经过step个数取一个;step=1时可以省去
>>>a[:, :, 0:28:2, 0:28:2].shape
torch.Size([4, 3, 14, 14]) #对图像做各行采样 开始索引:结束索引:步长

高级索引-选取具体索引号-select by specific index

>>>a.index_select(0, torch.tensor([0, 2])).shape
torch.Size([2, 3, 28, 28]) 
# index_select
# 第一个参数代表需要对哪个维度进行操作,0指代第0维
# 第二个参数代表需要选择的序列数,[0, 2]代表选择序号为0和2的图片

>>>a.index_select(1, torch.tensor([1, 2])).shape
torch.Size([4, 2, 28, 28])

>>>a[...].shape
torch.Size([4, 3, 28, 28])
#  ... 表示所有维度,所有数据

>>>a[0, ...].shape
torch.Size([3, 28, 28])

>>>a[:, 1, ...].shape
torch.Size([4, 28, 28])

>>>a[..., :2].shape
torch.Size([4, 3, 28, 2])

高级索引-掩码选取-select by mask

>>>x = torch.randn(3, 4) # 随机生成三行四列的数据
>>>x
tensor([[ 0.4295,  0.4206, -0.5532, -1.4849],
        [ 0.4281,  0.0803, -1.1630,  1.4777],
        [ 0.1567, -0.9116, -1.7134, -0.1576]])
>>>mask = x.ge(0)  # 将x中大于0的数置为True,小于等于0的数置为False
>>>mask
tensor([[ True,  True, False, False],
        [ True,  True, False,  True],
        [ True, False, False, False]])
>>>torch.masked_select(x, mask)  
# 使用masked_select 选择那些mask中为True的数据, 输出结果展平,shape=(1, n)
tensor([0.4295, 0.4206, 0.4281, 0.0803, 1.4777, 0.1567])

你可能感兴趣的:(pytorch,学习,python)