文章目录
链接文章:
python pytorch中 .view()函数讲解
pytorch中张量的分块.chunk()方法和拆分.split()方法
NumPy中 ravel() 和 flatten() 展平数组 对比——Dust_Evc
NumPy:确定 ndarray 是查看还是复制以及它是否共享内存
tensor数据存储与内存共享
深入理解Tensor对象_下:从内存看Tensor
1 逻辑存储与内存存储
对于一个Tensor来说,我们可以认为它有两种存储方式
- 逻辑存储

- 内存存储

1.1 高维张量
- 在torch/numpy中, 即使是高维张量在内存中也是存储在一块连续的内存区域中
- 会记录一些元信息来描述数组的"形态", 例如起始地址, 步长 (stride), 大小 (size)等.
- 对高维张量进行索引时我们采用
起始地址 + 地址偏移量的计算方式, 而地址偏移量就需要用到stride和size的信息

当我们在使用view去修改tensor的时候, 其实我们并没有修改tensor在内存中的存储, 而只是通过修改stride和size来描述张量形状的变化
1.2 按行展开和按列展开

- 如果张量x的行优先展开形式和其内存存储一致, 则我们称之为 C-contiguous
- Numpy, Pytorch中的
contiguous指的就是C-contiguous
- Numpy, Pytorch中的
- 如果张量x的列优先展开形式和其内存存储一致, 则我们称之为 Fortran-contiguous
- Matlab, Fortran中的
contiguous指的是Fortran-contiguous.
- Matlab, Fortran中的
- 可用转置实现两种存储格式的转换,以pytorch为例:
vp=torch.randn(1,204)
vp1=vp.view(68,-1)

文章详细介绍了张量的逻辑存储和内存存储,包括C-contiguous和Fortran-contiguous的概念。解释了numpy中的ravel()和flatten()函数在矩阵展平中的应用,以及Pytorch中view(),reshape()和permute()的区别。view()和reshape()主要改变张量的形状描述,而不改变内存,而permute()可能不返回contiguous的张量。此外,文章还展示了如何在Pytorch中实现按列展平的操作。
最低0.47元/天 解锁文章
923

被折叠的 条评论
为什么被折叠?



