import torch
box_a=torch.tensor([[1,2,3],[1,2,3]])
print(box_a[:, 2:].squeeze(0).shape)
print(box_a[:, 2:].shape)
# torch.Size([2, 1])
# torch.Size([2, 1])
print("#################################")
print(box_a[:, 2:].squeeze(1).shape)
print(box_a[:, 2:].shape)
'''squeeze 只能去掉维度为1的维度,如果目标维度不是1
比如是2,就不可以去掉'''
# torch.Size([2])
# torch.Size([2, 1])
print("#################################")
print(box_a[:, 2:].unsqueeze(0).shape)
print(box_a[:, 2:].shape)
'''unsqueeze 是在目标维度上增加一个维度,示例为在
第一个维度dim=0的位置添加一个维度'''
# torch.Size([1, 2, 1])
# torch.Size([2, 1])
print("#################################")
print(box_a[:, 2:].shape)
print(box_a[:, 2:].expand(2,1000).shape)
'''expand 只能扩展size为1的维度
参考 :https://blog.csdn.net/weixin_39504171/article/details/106090626
'''
# torch.Size([2, 1])
# torch.Size([2, 1000])
print("#################################")
print(box_a[:, 2:].shape)
print(box_a.shape)
print(box_a[:, 2:].expand_as(box_a).shape)
print(box_a[:, 2:])
print(box_a)
print(box_a[:, 2:].expand_as(box_a))
# torch.Size([2, 1])
# torch.Size([2, 3])
# torch.Size([2, 3])
# tensor([[3],
# [3]])
# tensor([[1, 2, 3],
# [1, 2, 3]])
# tensor([[3, 3, 3],
# [3, 3, 3]])
'''expand_as 可以扩展到目标维度,只不过expand_as '''
# print(box_a[:, 2:].expand_as(box_a.unsqueeze(0)))
'''expand_as 比较复杂的示例 torch.Size([2, 1, 1]) 扩展到 torch.Size([4, 7, 1]) '''
# print(box_a[:, 2:].unsqueeze(1).expand_as(torch.rand(2,7,1)))
print(box_a[:, 2:].unsqueeze(1).shape)
# torch.Size([2, 1, 1])
print("#################################")
'''repeat 操作 '''
print(box_a.shape)
'''repeat (1)操作用来阔展维度 相当于 unsqueeze(0) '''
print(box_a.repeat(1,1,1,1).shape)
# RuntimeError: Number of dimensions of repeat dims can not be
# smaller than number of dimensions of tensor
'''复制后的最小维度数目不能小于原先的维度数目,比如原来是两个维度,
复制后的目标只有一个维度就不行了'''
# print(box_a.repeat(1).shape)