torch.cat((A,B),dim) 或 torch.cat([A,B],dim)
拼接张量A和B,dim表示拼接方向,dim=0表示按行拼接(即两张量的列大小一致),反之dim=1表示按列拼接。如果是高维的话,就按照dim的数值方向拼接
import torch
A=torch.ones(2,3) #2x3的张量(矩阵)
B=2*torch.ones(4,3)#4x3的张量(矩阵)
C=torch.cat((A,B),0)#按维数0(行)拼接
D=2*torch.ones(2,4) #2x4的张量(矩阵)
E=torch.cat((A,D),1)#按维数1(列)拼接
# 高维拼接
>>> A = torch.zeros((1,2,3,4))
>>> B = torch.zeros((1,2,3,4))
>>> C = torch.cat((A,B),dim=2)
>>> C.shape
torch.Size([1, 2, 6, 4])
torch.sum(A,dim)
对张量A的某一维度求和
import torch
A=torch.ones(2,3) #2x3的张量(矩阵)
B=torch.sum(A,0)#按维数0(行)相加
C=torch.sum(A,1)#按维数0(列)相加
>>> import torch
>>> a = torch.ones([1,2,3,4])*2
>>> b = torch.ones([1,2,3,4])
>>> a1 = a.unsqueeze(dim=1)
>>> b1 = b.unsqueeze(dim=1)
>>> a1.shape
torch.Size([1, 1, 2, 3, 4])
>>> b1.shape
torch.Size([1, 1, 2, 3, 4])
>>> c = torch.cat([a1, b1], dim=1)
>>> c.shape
torch.Size([1, 2, 2, 3, 4])
>>> d1 = torch.sum(c,dim=0)
>>> d2 = torch.sum(c,dim=1)
>>> d3 = torch.sum(c,dim=2)
>>> d4 = torch.sum(c,dim=3)
>>> c
tensor([[[[[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]],
[[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]]],
[[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]]]])
>>> d1
tensor([[[[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]],
[[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]]],
[[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]]])
>>> d2
tensor([[[[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]],
[[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]]]])
>>> d3
tensor([[[[4., 4., 4., 4.],
[4., 4., 4., 4.],
[4., 4., 4., 4.]],
[[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]]]])
>>> d4
tensor([[[[6., 6., 6., 6.],
[6., 6., 6., 6.]],
[[3., 3., 3., 3.],
[3., 3., 3., 3.]]]])
>>> c.shape
torch.Size([1, 2, 2, 3, 4])
>>> d1.shape
torch.Size([2, 2, 3, 4])
>>> d2.shape
torch.Size([1, 2, 3, 4])
>>> d3.shape
torch.Size([1, 2, 3, 4])
>>> d4.shape
torch.Size([1, 2, 2, 4])
dim=0,去掉一个括号,里面的内容相加。dim=1,去掉两个括号,里面的内容相加。
从上面实验可以看出,除了dim=0会直接去掉一个括号,其余的dim都会相加减。实际上dim=0也会相加,只是不便于理解