英文:
what is the difference between torch.stack([t1,t1,t1],dim=1) and torch.hstack([t1,t1,t1])?
问题
使用不同的方法进行水平堆叠时,对于相同的向量会产生两种不同的输出。
- 使用
torch.stack([t1,t1,t1],dim=1)
方法:
t1_stack = torch.stack([t1,t1,t1],dim=1)
t1_stack,t1_stack.shape
输出:
(tensor([[5., 5., 5.],
[2., 2., 2.],
[3., 3., 3.],
[4., 4., 4.],
[5., 5., 5.],
[6., 6., 6.],
[7., 7., 7.],
[8., 8., 8.],
[9., 9., 9.]]),
torch.Size([9, 3]))
- 使用
torch.hstack([t1,t1,t1])
方法:
h_stack = torch.hstack([t1,t1,t1])
h_stack,h_stack.shape
输出:
(tensor([5., 2., 3., 4., 5., 6., 7., 8., 9., 5., 2., 3., 4., 5., 6., 7., 8., 9.,
5., 2., 3., 4., 5., 6., 7., 8., 9.]),
torch.Size([27]))
这两种方法的不同之处在于:
-
torch.stack
沿着指定的维度(这里是dim=1,即水平维度)将输入的张量序列堆叠起来,因此在结果中你得到了一个形状为 [9, 3] 的二维张量,其中每个向量都作为一行出现。 -
torch.hstack
不是一个PyTorch内置函数,可能是你自己实现的一个水平堆叠函数。它将输入的张量序列在水平方向拼接,所以结果是一个形状为 [27] 的一维张量,其中所有的值都水平排列在一起。
因此,不同的方法导致了不同的输出形状和排列方式。
英文:
Technically, both the methods torch.stack([t1,t1,t1],dim=1) and torch.hstack([t1,t1,t1]) performs the same operation i.e they both horizontally stack the vectors.
But when I performed both on a same vector but they yield 2 different outputs can someone explain why ?
Taken tensor t1 :
# Code :
t1 = torch.arange(1.,10.)
t1,t1.shape
# Output :
(tensor([1., 2., 3., 4., 5., 6., 7., 8., 9.]), torch.Size([9]))
Using torch.stack([t1,t1,t1],dim=1)
# Code :
t1_stack = torch.stack([t1,t1,t1],dim=1)
# dim value lies between [-2,1]
# -2 and 0 stack vertically
# -1 and 1 stack Horizontally
t1_stack,t1_stack.shape
# Output :
(tensor([[5., 5., 5.],
[2., 2., 2.],
[3., 3., 3.],
[4., 4., 4.],
[5., 5., 5.],
[6., 6., 6.],
[7., 7., 7.],
[8., 8., 8.],
[9., 9., 9.]]),
torch.Size([9, 3]))
Using torch.hstack([t1,t1,t1])
# Code :
h_stack = torch.hstack([t1,t1,t1])
h_stack,h_stack.shape
# Output :
(tensor([5., 2., 3., 4., 5., 6., 7., 8., 9., 5., 2., 3., 4., 5., 6., 7., 8., 9.,
5., 2., 3., 4., 5., 6., 7., 8., 9.]),
torch.Size([27]))
It gives 2 different outputs for same vector while using different methods for horizontal stacking
答案1
得分: 2
查看PyTorch文档:
所以显然在您的情况下(1-D张量),这不是完全相同的操作。
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论