Tensor的形状是[5, 2, 18, 4096],我想取第0维的每个大小为[2, 18, 4096]的Tensor,并将其堆叠在另一个形状与[2, 18, 4096]相同的Tensor的顶部,并对第0维的所有Tensor都这样做,最终Tensor应该是[2, 90, 4096]。
[5, 2, 18, 4096]
[2, 18, 4096]
[2, 90, 4096]
kg7wmglp1#
1.设置
a = torch.rand((5,2,18,4096)) # 5,2,18,4096
1.将堆叠尺寸移动到顶部
a = a.permute(0,2,1,3) # 5,18,2,4096
1.堆叠前2维
a = torch.vstack(list(a)) # 90,2,4096
1.置换
a = a.permute(1,0,2) # 2,90,4096
tktrz96b2#
我确实得到了一个解决这个问题的一般方法,但是有没有更好的方法呢?还有,它在数学上也正确吗?
chunks = torch.Tensor(self.buffer) #shape is [5, 2, 18, 4096] chunks = chunks.permute(1, 0, 2, 3) chunks = chunks.reshape(chunks.shape[0], chunks.shape[1]*chunks.shape[2], chunks.shape[-1]) #the resulting shape is [2, 90, 4096]
moiiocjp3#
事实证明有一个非常简单的方法:torch.hstack始终沿着第二维(即沿轴1)堆叠。例如,考虑以下情况:
torch.hstack
start = torch.arange(120).reshape([5,4,3,2]) result = torch.hstack(list(start))
Tensorstart的形状为5,4,3,2,但result的形状为(4,15,2),这是由沿着轴1堆叠5个(4,3,2)阵列而得到的。将list应用于多维Tensor,将Tensor沿着主轴分解,list(start)是包含5个(4,3,2)形Tensor的列表。
start
result
list
list(start)
3条答案
按热度按时间kg7wmglp1#
1.设置
1.将堆叠尺寸移动到顶部
1.堆叠前2维
1.置换
tktrz96b2#
我确实得到了一个解决这个问题的一般方法,但是有没有更好的方法呢?还有,它在数学上也正确吗?
moiiocjp3#
事实证明有一个非常简单的方法:
torch.hstack
始终沿着第二维(即沿轴1)堆叠。例如,考虑以下情况:Tensor
start
的形状为5,4,3,2,但result
的形状为(4,15,2),这是由沿着轴1堆叠5个(4,3,2)阵列而得到的。将
list
应用于多维Tensor,将Tensor沿着主轴分解,list(start)
是包含5个(4,3,2)形Tensor的列表。