tensor中切片与索引

索引与切片

#创建一个tensor
a=torch.rand(4,3,28,28)
#可以将其理解为4张图片3个维度(RGB)图片大小为28x28

a[0].shape#取第0张图片
#out:torch.Size([3, 28, 28])

a[0,0].shape#第0张图片的第0个通道的size
#out:torch.Size([28, 28])

a[0,0,2,4]
#含义:第0张图片的第0个通道的第2行4列的那个像素点
#是标量
#out:tensor(0.2814)

#取前2张图
a[:2].shape

#前2张图片的第1个通道的shape
a[:2,:1,:,:].shape

#取前2张图片
a[:2,1:,:,:].shape

a[:2,-1:,:,:].shape#-1反方向开始
# 3  2  1
#-1 -2 -3

a[:,:,0:28:2,0:28:2].shape
#隔行采样,区间:0-28,间隔:2

a[:,:,::3,::3].shape
#取全部,隔行采样

按索引取

a=torch.rand(4,3,28,28)

#先选维度,再选范围
#(第一维度,第几张[0-2张])
#torch.index_select(a, 0, torch.tensor([0, 2]))
a.index_select(0,torch.tensor([0,2])).shape

a[...].shape#取所有
a[0,...].shape#取第一张图片所有的通道和大小
a[:,1,...].shape#取所有图片第一个通道的大小
a[...,:2].shape#取所有图片所有通道的0-2像素大小位置

掩码,masked_select

判断tensor中的值是否符合制定大小返回bool值

#随机创建一个tensor值
x=torch.randn(3,4)
'''tensor([[ 0.6212,  0.6210, -0.7202,  3.2044],
        [ 0.5992, -0.4278,  1.6079,  2.0227],
        [ 1.2778,  0.8451, -0.6770, -0.6830]])

''''

mask=x.ge(0.5)#>=0.5的元素判断
mask
'''out:
tensor([[ True,  True, False,  True],
        [ True, False,  True,  True],
        [ True,  True, False, False]])'''

torch.masked_select(x,mask)#选择出>=0.5的数
#out:tensor([0.6212, 0.6210, 3.2044, 0.5992, 1.6079, 2.0227, 1.2778, 0.8451])

除使用上述方法还可以直接得到

x[x>0.5]
#out:tensor([0.6212, 0.6210, 3.2044, 0.5992, 1.6079, 2.0227, 1.2778, 0.8451])

take

返回一个新的张量,其中的元素是输入元素在给定的索引处,将输入张量视为视为一维张量。

#返回一个新的张量,其中的元素是输入元素在给定的索引处,将输入张量视为视为一维张量。
torch.take(src,torch.tensor([0,2,5]))

你可能感兴趣的:(深度学习之pytorch,python,深度学习,人工智能)