繁体   English   中英

创建多维火炬张量时间序列

[英]Create multidimensional torch tensor time series

我想从多维 numpy 数组中创建一个火炬张量序列。 我已经用一维 arrays 实现了它,但找不到更多尺寸的正确方法......

这是一个一维向量示例:

import numpy as np
import torch

n = np.arange(10)
t = torch.tensor([n[i: i + 3] for i in range(7)])

作为 output:

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

假设我有一个二维向量,而不是一维向量。

import numpy as np
import torch

n = np.array([np.arange(10), np.arange(10, 20)])
t = torch.tensor([n[..., i: i + 3] for i in range(7)]).view(2, -1, 3)

output 是:

tensor([[[ 0,  1,  2],
         [10, 11, 12],
         [ 1,  2,  3],
         [11, 12, 13],
         [ 2,  3,  4],
         [12, 13, 14],
         [ 3,  4,  5]],

        [[13, 14, 15],
         [ 4,  5,  6],
         [14, 15, 16],
         [ 5,  6,  7],
         [15, 16, 17],
         [ 6,  7,  8],
         [16, 17, 18]]])

我正在寻找的是:

tensor([[[ 0,  1,  2],
         [ 1,  2,  3],
         [ 2,  3,  4],
         [ 3,  4,  5],
         [ 4,  5,  6],
         [ 5,  6,  7],
         [ 6,  7,  8]],

         [[10, 11, 12],  
         [11, 12, 13],
         [12, 13, 14],
         [13, 14, 15],
         [14, 15, 16],
         [15, 16, 17],     
         [16, 17, 18]]])

如您所见,行是交替的……有什么方法可以实现吗?

PD:如果有更优雅的解决方案,我也将非常感激! 我尝试过使用torch.repeat_interleave方法,但一无所获……

非常感谢!

目前还不是很清楚您要实现什么公式,但看起来应该是t[i, j, k] = i*10 + j + k 这个公式只不过是三个指数范围的外和。 最直接的获取方式是

t = torch.tensor(np.add.outer(np.arange(2)*10, np.add.outer(np.arange(7), np.arange(3))))

这使

tensor([[[ 0,  1,  2],
         [ 1,  2,  3],
         [ 2,  3,  4],
         [ 3,  4,  5],
         [ 4,  5,  6],
         [ 5,  6,  7],
         [ 6,  7,  8]],

        [[10, 11, 12],
         [11, 12, 13],
         [12, 13, 14],
         [13, 14, 15],
         [14, 15, 16],
         [15, 16, 17],
         [16, 17, 18]]], dtype=torch.int32)

您可以通过沿适当的轴连接子张量来实现这一点:

n = np.array([np.arange(10), np.arange(10, 20)])
t = torch.tensor([n[..., i: i + 3] for i in range(7)])

t = torch.cat([_ for _ in t.unsqueeze(-2)], dim=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM