Python 我如何折叠一个我用PyTorch展开的有重叠的张量?
我有一个大小的张量:Python 我如何折叠一个我用PyTorch展开的有重叠的张量?,python,pytorch,tensor,Python,Pytorch,Tensor,我有一个大小的张量:torch.size([163840]),然后展开: inp_unfolded = inp_seq.unfold(1, 160, 80) 这给了我一个形状:torch.Size([1797160]) 我如何将其重新折叠,以得到一个火炬大小([163840])?对于该特定配置,由于63840可被160整除,步长是切片大小的倍数,您只需选择该维度上的每一个第二个元素,然后选择得到的张量: inp_展开[:,::2,:]展平(1,2) 更一般地说,对于t.unfold(i,n,
torch.size([163840])
,然后展开:
inp_unfolded = inp_seq.unfold(1, 160, 80)
这给了我一个形状:torch.Size([1797160])
我如何将其重新折叠,以得到一个
火炬大小([163840])
?对于该特定配置,由于63840
可被160
整除,步长是切片大小的倍数,您只需选择该维度上的每一个第二个元素,然后选择得到的张量:
inp_展开[:,::2,:]展平(1,2)
更一般地说,对于t.unfold(i,n,s)
,如果t.shape[i]%n==0且n%s==0保持不变,则可以通过以下方式恢复原始张量:
index=[t.shape中的u u的切片(无)]
索引[i]=切片(无,无,n//s)
原始=t.展开(i,n,s)[元组(索引)].展平(i,i+1)
当然,如果事先知道维度i
,也可以使用切片表示法。例如,i==1
,如您的示例所示:
original=t.unfold(1,n,s)[:,::n//s,…]展平(1,2)
实际上,给定的条件是:
n>=s
(否则步骤将跳过一些原始数据,我们无法还原)
n+s>x=torch.arange(1,18)
>>p=x.0(0,5,2)
>>滚动(p,5,2,0)
张量([1,2,3,4,5,6,7,8,9,10,11,12,13,14,。,
15., 16., 17.])
你也可以试着用它
x=torch.arange(1,18)。重塑(1,17)
和轴1