pytorch 我有一个形状为[5,2,18,4096]的Tensor,我想把第0维沿着第2维叠加起来,怎么做呢?

8hhllhi2  于 2022-12-26  发布在  其他
关注(0)|答案(3)|浏览(111)

Tensor的形状是[5, 2, 18, 4096],我想取第0维的每个大小为[2, 18, 4096]的Tensor,并将其堆叠在另一个形状与[2, 18, 4096]相同的Tensor的顶部,并对第0维的所有Tensor都这样做,最终Tensor应该是[2, 90, 4096]

kg7wmglp

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
tktrz96b

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]
moiiocjp

moiiocjp3#

事实证明有一个非常简单的方法:torch.hstack始终沿着第二维(即沿轴1)堆叠。例如,考虑以下情况:

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的列表。

相关问题