Numpy pytorch张量跨步-如何工作
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
tensor.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
的视图,即它共享相同的底层内存,只是使用不同的跨步来访问它。