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]))
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值