【问题标题】:tensor transformation in pytorch?pytorch中的张量变换?
【发布时间】:2020-12-04 13:42:49
【问题描述】:

我有一个形状为 (size, 1) 的张量,我想通过改变其值将其转换为形状为 (size, lookback, 1) 的张量。下面是熊猫等价物

size = 7
lookback = 3

data = pd.DataFrame(np.arange(size), columns=['out'])  # input
y = np.full((len(data), lookback, 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.]]

【问题讨论】:

    标签: arrays multidimensional-array pytorch tensor torch


    【解决方案1】:

    您可以为此使用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, 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., 0., 1.],
            [0., 1., 2.],
            [1., 2., 3.],
            [2., 3., 4.],
            [3., 4., 5.],
            [4., 5., 6.]])
    

    【讨论】:

      猜你喜欢
      • 2021-10-11
      • 2022-10-17
      • 2020-08-05
      • 2019-07-29
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      相关资源
      最近更新 更多