pytorch张量重复,连接,压缩,置换等常用操作

重复张量

torch.Tensor.repeat(*sizes)

在张量的某个维度上复制

张量维度 等于 repeat参数个数

#创建一个二维张量
x = torch.randn((2,3)) #torch.Size([2, 3])
#在x的两个维度上分别重复4次,2次,即得目标维度:4x2=8, 2x3=6,即(8,6)
x= x.repeat(4, 2) #torch.Size([8, 6])

张量维度 不等于 repeat参数个数

例如:

#创建一个二维张量
t1 = torch.randn((1,2)) #torch.Size([1, 2])

#维度为2,小于repeat参数数量3,则结果大小:(3,1x5, 2x6)
t2 = t1.repeat(3,5,6) #torch.Size([3, 5, 12])

再如:

#创建一个三维张量
t1 = torch.randn((2,2,3)) #torch.Size([2, 2, 3])
#目标大小(3, 2x4, 2x5, 3x6)
t2 = t1.repeat(3,4,5,6)#torch.Size([3, 8, 10, 18])

repeat类似于平铺操作 tile,repeat参数指定了在每个维度(dimention)平铺(tile)的次数,如果张量维度 < repeat参数数量,则添加新的维度。如上例所示。

张量连接

torch.cat(tensors, dim=0, out=None) → Tensor
在指定的维度(dim)上,将张量连接

>>> x = torch.randn(2, 3)
>>> x
tensor([[ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497]])
>>> torch.cat((x, x, x), 0)
tensor([[ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497],
        [ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497],
        [ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497]])
>>> torch.cat((x, x, x), 1)
tensor([[ 0.6580, -1.0969, -0.4614,  0.6580, -1.0969, -0.4614,  0.6580,
         -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497, -0.1034, -0.5790,  0.1497, -0.1034,
         -0.5790,  0.1497]])

张量压缩,扩张

torch.squeeze(input, dim=None, out=None) → Tensor
将张量中所有元素数量为1的维度都去掉

torch.unsqueeze(input, dim, out=None) → Tensor

inplace version: unsqueeze_(dim) → Tensor

为张量添加一个维度

>>> x = torch.zeros(2, 1, 2, 1, 2)
>>> x.size()
torch.Size([2, 1, 2, 1, 2])
>>> y = torch.squeeze(x)
>>> y.size()
torch.Size([2, 2, 2])
>>> y = torch.squeeze(x, 0)
>>> y.size()
torch.Size([2, 1, 2, 1, 2])
>>> y = torch.squeeze(x, 1)
>>> y.size()
torch.Size([2, 2, 1, 2])

>>> x = torch.tensor([1, 2, 3, 4])
>>> torch.unsqueeze(x, 0)
tensor([[ 1,  2,  3,  4]])
>>> torch.unsqueeze(x, 1)
tensor([[ 1],
        [ 2],
        [ 3],
        [ 4]])

张量变形

torch.Tensor.view(*args) → Tensor

返回一个有相同数据但是不同形状的新的向量。

返回的装两必须与原张量有相同的数据和相同的元素个数,但是可以有不同的尺寸。

参数:

args (torch.Size or int…) - 理想的指定尺寸

x = torch.randn(4, 4)
x.size()
torch.Size([4, 4])
y = x.view(16)
y.size()
torch.Size([16])

置换张量维度

torch.Tensor.permute(*dims)

将执行本方法的张量的维度换位。

参数:

dim (int) - 指定换位顺序
例子:

x = torch.randn(2, 3, 1) #torch.Size([2, 3, 1])

tensor([[[-0.8959],
         [-0.5030],
         [ 1.1197]],

        [[-0.5571],
         [-1.4857],
         [ 0.5387]]])

x = x.permute(2, 0, 1)torch.Size([1, 2, 3])

tensor([[[-0.8959, -0.5030,  1.1197],
         [-0.5571, -1.4857,  0.5387]]])

你可能感兴趣的:(python,机器学习,pytorch,torch,repeat)