张量的拼接
2021/11/14 23:45:10
本文主要是介绍张量的拼接,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
张量的拼接有两种主要的基本策略:
不增加张量的维度,只增加某个维度方向的长度:cat()
增加张量的维度,不增加单个维度方向的长度:stack()
第2章 增加张量长度的拼接:cat()
2.1 基本原理
2.2 函数说明
功能:在不改变张量维度的情况下,通过增加张量在某个维度方向的长度,把两个张量拼接起来。
原型:cat(input, dim)
输入参数:
input: 输入张量
dim:拼接的方向
2.3 代码示例
(1)按照dim =0 的方向拼接
# 张量的拼接:阶数不变,增加dim方向的长度
a = torch.Tensor([[1,1,1,1], [2,2,2,2],[3,3,3,3]])
b = torch.Tensor([[4,4,4,4], [5,5,5,5],[5,5,5,5]])
print("源张量")
print(a)
print(a.shape)
print(b)
print(b.shape)
print("\n按照dim=0方向拼接")
c = torch.cat((a,b),dim=0)
print(c)
print(c.shape)
输出:
源张量
tensor([[1., 1., 1., 1.],
[2., 2., 2., 2.],
[3., 3., 3., 3.]])
torch.Size([3, 4])
tensor([[4., 4., 4., 4.],
[5., 5., 5., 5.],
[5., 5., 5., 5.]])
torch.Size([3, 4])
按照dim=0方向拼接
tensor([[1., 1., 1., 1.],
[2., 2., 2., 2.],
[3., 3., 3., 3.],
[4., 4., 4., 4.],
[5., 5., 5., 5.],
[5., 5., 5., 5.]])
torch.Size([6, 4])
(2)按照dim=1的方向进行拼接
# 张量的拼接:增加阶数,
a = torch.Tensor([[1,1,1,1], [2,2,2,2],[3,3,3,3]])
b = torch.Tensor([[4,4,4,4], [5,5,5,5],[5,5,5,5]])
print("源张量")
print(a)
print(a.shape)
print(b)
print(b.shape)
print("\n按照dim=0方向拼接:扩展阶数")
c = torch.stack((a,b),dim=0)
print(c)
print(c.shape)
输出:
源张量
tensor([[1., 1., 1., 1.],
[2., 2., 2., 2.],
[3., 3., 3., 3.]])
torch.Size([3, 4])
tensor([[4., 4., 4., 4.],
[5., 5., 5., 5.],
[5., 5., 5., 5.]])
torch.Size([3, 4])
按照dim=1方向拼接
tensor([[1., 1., 1., 1., 4., 4., 4., 4.],
[2., 2., 2., 2., 5., 5., 5., 5.],
[3., 3., 3., 3., 5., 5., 5., 5.]])
torch.Size([3, 8])
第3章 增加张量维度的拼接:stack()
3.1 基本原理
stack堆叠,可以增加一个维度,因此案例中dim=0,1,2 三种情形,在三种方向进行堆叠。
(1)按照dim = 0的方向堆叠
(2)按照dim = 1的方向堆叠
(3)按照dim = 2的方向堆叠
2.2 函数说明
功能:通过增加张量维度,把两个张量堆叠起来,堆叠后,维度增加1.
原型:stack(input, dim)
输入参数:
input: 输入张量
dim:拼接的方向,这里的dim是指拼接后张量的dim,而不是原张量的dim
2.3 代码示例
(1)dim=0的方向
# 张量的拼接:增加阶数,
a = torch.Tensor([[1,1,1,1], [2,2,2,2],[3,3,3,3]])
b = torch.Tensor([[4,4,4,4], [5,5,5,5],[5,5,5,5]])
print("源张量")
print(a)
print(a.shape)
print(b)
print(b.shape)
print("\n按照dim=0方向拼接:扩展阶数")
c = torch.stack((a,b),dim=0)
print(c)
print(c.shape)
输出:
源张量
tensor([[1., 1., 1., 1.],
[2., 2., 2., 2.],
[3., 3., 3., 3.]])
torch.Size([3, 4])
tensor([[4., 4., 4., 4.],
[5., 5., 5., 5.],
[5., 5., 5., 5.]])
torch.Size([3, 4])
按照dim=0方向拼接:扩展阶数
tensor([[[1., 1., 1., 1.],
[2., 2., 2., 2.],
[3., 3., 3., 3.]],
[[4., 4., 4., 4.],
[5., 5., 5., 5.],
[5., 5., 5., 5.]]])
torch.Size([2, 3, 4])
(2)dim=1的方向
a = torch.Tensor([[1,1,1,1], [2,2,2,2],[3,3,3,3]])
b = torch.Tensor([[4,4,4,4], [5,5,5,5],[5,5,5,5]])
print("源张量")
print(a)
print(a.shape)
print(b)
print(b.shape)
print("\n按照dim=1方向拼接:扩展阶数")
c = torch.stack((a,b),dim=1)
print(c)
print(c.shape)
输出:
源张量
tensor([[1., 1., 1., 1.],
[2., 2., 2., 2.],
[3., 3., 3., 3.]])
torch.Size([3, 4])
tensor([[4., 4., 4., 4.],
[5., 5., 5., 5.],
[5., 5., 5., 5.]])
torch.Size([3, 4])
按照dim=1方向拼接:扩展阶数
tensor([[[1., 1., 1., 1.],
[4., 4., 4., 4.]],
[[2., 2., 2., 2.],
[5., 5., 5., 5.]],
[[3., 3., 3., 3.],
[5., 5., 5., 5.]]])
torch.Size([3, 2, 4])
(3)dim=2的方向
a = torch.Tensor([[1,1,1,1], [2,2,2,2],[3,3,3,3]])
b = torch.Tensor([[4,4,4,4], [5,5,5,5],[5,5,5,5]])
print("源张量")
print(a)
print(a.shape)
print(b)
print(b.shape)
print("\n按照dim=2方向拼接:扩展阶数")
c = torch.stack((a,b),dim=2)
print(c)
print(c.shape)
输出:
源张量
tensor([[1., 1., 1., 1.],
[2., 2., 2., 2.],
[3., 3., 3., 3.]])
torch.Size([3, 4])
tensor([[4., 4., 4., 4.],
[5., 5., 5., 5.],
[5., 5., 5., 5.]])
torch.Size([3, 4])
按照dim=2方向拼接:扩展阶数
tensor([[[1., 4.],
[1., 4.],
[1., 4.],
[1., 4.]],
[[2., 5.],
[2., 5.],
[2., 5.],
[2., 5.]],
[[3., 5.],
[3., 5.],
[3., 5.],
[3., 5.]]])
torch.Size([3, 4, 2])
这篇关于张量的拼接的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-09必试!帮 J 人团队解决物流错发漏发的软件神器!
- 2025-01-09不容小觑!助力 J 人物流客服安抚情绪的软件!
- 2025-01-09为什么医疗团队协作离不开智能文档工具?
- 2025-01-09惊叹:J 人团队用啥软件让物流服务快又准?
- 2025-01-09如何利用数据分析工具优化项目资源分配?4种工具推荐
- 2025-01-09多学科协作难?这款文档工具可以帮你省心省力
- 2025-01-09团队中的技术项目经理TPM:工作内容与资源优化策略
- 2025-01-09JIT生产管理法:优化流程,提升竞争力的秘诀
- 2025-01-092024全球互联网流量分析报告
- 2025-01-09如何提升学校行政管理中的进度追踪效率?4个实用策略和3款工具推荐