torch.cat
函数是PyTorch中用于拼接张量(tensors)的函数。它可以沿着指定的维度将多个张量连接在一起。
下面是torch.cat
函数的用法和一个示例说明:
torch.cat(tensors, dim=0, out=None) -> Tensor
参数说明:
tensors
:要拼接的张量序列,可以是一个张量列表或元组。dim
:指定拼接的维度。例如,dim=0
表示在第一个维度上拼接,dim=1
表示在第二个维度上拼接,以此类推。out
:可选参数,用于指定输出张量的位置。如果未提供,将创建一个新的张量来保存结果。假设有两个二维张量a
和b
:
import torch
a = torch.tensor([[1, 2],
[3, 4]])
b = torch.tensor([[5, 6],
[7, 8]])
接下来我们将用这两个张量进行示例。
要在第一个维度(行)上拼接这两个张量,根据cat函数构成直接拼接即可
result = torch.cat((a, b), dim=0)
print(result)
完整代码示例:
import torch
a = torch.tensor([[1, 2],
[3, 4]])
b = torch.tensor([[5, 6],
[7, 8]])
result = torch.cat((a, b), dim=0)
# 在第一个维度上进行拼接
#在[[1, 2], [3, 4]]最外边的"["进行拼接
print(result)
输出:
tensor([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
在这个示例中,torch.cat
将张量a
和张量b
沿着第一个维度(行)连接在一起,生成一个新的张量result
。可以通过指定不同的dim
参数来在其他维度上进行拼接。
import torch
a = torch.tensor([[1, 2],
[3, 4]])
b = torch.tensor([[5, 6],
[7, 8]])
result = torch.cat((a, b), dim=1)
# 在第二个维度上进行拼接
#在[[1, 2], [3, 4]]的第二个"["进行拼接
print(result)
输出:
tensor([[1, 2, 5, 6],
[3, 4, 7, 8]])
在这个示例中,torch.cat
将张量a
和张量b
沿着第二个维度(行)连接在一起,生成一个新的张量result
。
注意: dim=-1
是对最后一个维度进行拼接,因此二维张量dim=-1
进行拼接时,结果与dim=-1
相同
假设有两个二维张量c
和d
:
import torch
c = torch.tensor([[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]],
[[11, 12, 13],
[14, 15, 16],
[17, 18, 19]]]
)
d = torch.tensor([[[21, 22, 23],
[24, 25, 26],
[27, 28, 29]],
[[31, 32, 33],
[34, 35, 36],
[37, 38, 39]]]
)
同样的,要在第一个维度(行)上拼接这两个张量,根据cat函数构成直接拼接即可
result = torch.cat((c, d), dim=0)
print(result)
完整代码示例:
import torch
c = torch.tensor([[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]],
[[11, 12, 13],
[14, 15, 16],
[17, 18, 19]]]
)
d = torch.tensor([[[21, 22, 23],
[24, 25, 26],
[27, 28, 29]],
[[31, 32, 33],
[34, 35, 36],
[37, 38, 39]]]
)
result = torch.cat((c, d), dim=0)
# 在第一个维度上进行拼接
#在最外边的"["进行拼接
print(result)
输出:
tensor([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[11, 12, 13],
[14, 15, 16],
[17, 18, 19]],
[[21, 22, 23],
[24, 25, 26],
[27, 28, 29]],
[[31, 32, 33],
[34, 35, 36],
[37, 38, 39]]])
在这个示例中,torch.cat
将张量a
和张量b
沿着第一个维度(行)连接在一起,生成一个新的张量result
。可以通过指定不同的dim
参数来在其他维度上进行拼接。
import torch
c = torch.tensor([[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]],
[[11, 12, 13],
[14, 15, 16],
[17, 18, 19]]]
)
d = torch.tensor([[[21, 22, 23],
[24, 25, 26],
[27, 28, 29]],
[[31, 32, 33],
[34, 35, 36],
[37, 38, 39]]]
)
result = torch.cat((c, d), dim=1)
# 在第二个维度上进行拼接
#在第二个"["进行拼接
print(result)
输出:
tensor([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[21, 22, 23],
[24, 25, 26],
[27, 28, 29]],
[[11, 12, 13],
[14, 15, 16],
[17, 18, 19],
[31, 32, 33],
[34, 35, 36],
[37, 38, 39]]])
在这个示例中,torch.cat
将张量c
和张量d
沿着第二个维度(行)连接在一起,生成一个新的张量result
。
import torch
c = torch.tensor([[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]],
[[11, 12, 13],
[14, 15, 16],
[17, 18, 19]]]
)
d = torch.tensor([[[21, 22, 23],
[24, 25, 26],
[27, 28, 29]],
[[31, 32, 33],
[34, 35, 36],
[37, 38, 39]]]
)
result = torch.cat((c, d), dim=2)
# 在第二个维度上进行拼接
#在第三个"["进行拼接,也就是最里面的那个
print(result)
输出:
tensor([[[ 1, 2, 3, 21, 22, 23],
[ 4, 5, 6, 24, 25, 26],
[ 7, 8, 9, 27, 28, 29]],
[[11, 12, 13, 31, 32, 33],
[14, 15, 16, 34, 35, 36],
[17, 18, 19, 37, 38, 39]]])
在这个示例中,torch.cat
将张量c
和张量d
沿着第二个维度(行)连接在一起,生成一个新的张量result
。
注意: dim=-1
是对最后一个维度进行拼接,因此三维张量dim=-1
进行拼接时,结果与dim=-2
相同