# 索引与切片
a = torch.rand(4,3,28,28)
print(a[0].shape)
# torch.Size([3, 28, 28]) 输入的是cnn的4个batch的三通道的28*28的图片,索引出来的是第一个batch的
print(a[0,0].shape)
# torch.Size([28, 28]) 第一张图片的第一个通道的尺寸
print(a[0,0,2,4])
# tensor(0.9762) 第一长第一个通道第二行第四列的像素点值(标量)
# 取前两张或者后两张图片的连续性的索引、包含反向索引
# select first/last N
print(a.shape)
# 0~2不包含2,也就是前2
print(a[:2].shape)
print(a[:2,:1].shape)
# 从1之后,包含1,也就是1,2,3
print(a[:2,1:].shape)
# 反向索引
print(a[:2,-1:].shape)
# torch.Size([4, 3, 28, 28])
# torch.Size([2, 3, 28, 28])
# torch.Size([2, 1, 28, 28])
# torch.Size([2, 2, 28, 28])
# torch.Size([2, 1, 28, 28])
# 有间隔的采样
print(a[:,:,0:28:2,0:28:2,].shape)
# 也可以只留步长
print(a[:,:,::2,::2,].sh