Numpy pytorch张量跨步-如何工作

Numpy pytorch张量跨步-如何工作,numpy,pytorch,tensor,stride,Numpy,Pytorch,Tensor,Stride,PyTorch似乎没有关于tensor.stride()的文档。 有人能证实我的理解吗 我的问题有三个 Stride用于访问存储器中的元素。所以步幅大小和张量的大小是一样的。对吗 对于每个维度,对应的stride元素表示沿一维存储移动所需的时间。对吗 例如: In [15]: x = torch.arange(1,25) In [16]: x Out[16]: tensor([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1

PyTorch似乎没有关于
tensor.stride()
的文档。 有人能证实我的理解吗

我的问题有三个

  • Stride用于访问存储器中的元素。所以步幅大小和张量的大小是一样的。对吗

  • 对于每个维度,对应的stride元素表示沿一维存储移动所需的时间。对吗

  • 例如:

    In [15]: x = torch.arange(1,25)
    
    In [16]: x
    Out[16]:
    tensor([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18
    , 19, 20, 21, 22, 23, 24])
    
    In [17]: a = x.view(4,3,2)
    
    In [18]: a
    Out[18]:
    tensor([[[ 1,  2],
             [ 3,  4],
             [ 5,  6]],
    
            [[ 7,  8],
             [ 9, 10],
             [11, 12]],
    
            [[13, 14],
             [15, 16],
             [17, 18]],
    
            [[19, 20],
             [21, 22],
             [23, 24]]])
    
    In [20]: a.stride()
    Out[20]: (6, 2, 1)
    
  • 这些信息如何帮助有效地执行张量运算?基本上这是显示内存布局。那么它有什么帮助呢

  • 假设
    tensor
    numpy
    做的相同,
    strips
    允许底层
    c
    代码以几乎相同的轻松度在一维数据缓冲区(内存)中单步执行。它可以通过一次向前移动6个元素,通过一次一次的“行”来迭代“块”,它的代码< >形状< /代码>和代码>跨步< <代码> > <代码> > x=火炬。张量([ 1, 2, 3,4 ])<代码> > <代码> >(<代码> > <代码> 1 < /代码>,但是如果你执行<代码> y= x[::2 ]。然后
    y.stride()
    将是
    2
    。这里发生的基本情况是,我们避免创建
    y
    的副本,而是
    y
    x
    的视图,即它共享相同的底层内存,只是使用不同的跨步来访问它。