pytorch中的张量变换?

问题描述

我有一个(size,1)形状的张量,我想通过移动其值将其转换为(size,lookback,1)形状。对应的大熊猫低于

size = 7
lookback = 3

data = pd.DataFrame(np.arange(size),columns=['out'])  # input
y = np.full((len(data),1),np.nan)          # required/output
for j in range(lookback):
    y[:,j,0] = data['out'].shift(lookback - j - 1).fillna(method="bfill")

如何在pytorch中实现类似效果?

示例输入:

[0,1,2,3,4,5,6]

所需的输出:

[[0. 0. 0.]
 [0. 0. 1.]
 [0. 1. 2.]
 [1. 2. 3.]
 [2. 3. 4.]
 [3. 4. 5.]
 [4. 5. 6.]]

解决方法

您可以为此使用Tensor.unfold。首先,尽管您将需要张紧张量的前端,但是您可以使用nn.functional.pad。例如

import torch
import torch.nn.functional as F

size = 7
loopback = 3

data = torch.arange(size,dtype=torch.float)

# pad front of data with 2 values
# replicate padding requires 3d,4d,or 5d tensor,hence the creation of two unitary dimensions before padding
data_padded = F.pad(data[None,None,...],(loopback - 1,0),'replicate')[0,...]
# unfold with window size of 3 with step size of 1
y = data_padded.unfold(dimension=0,size=loopback,step=1)

输出为

tensor([[0.,0.,0.],[0.,1.],1.,2.],[1.,2.,3.],[2.,3.,4.],[3.,4.,5.],[4.,5.,6.]])

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...