大小、存储偏移量和跨步数
1.为了索引到存储中,张量依赖于一些信息,这些信息连同它们的存储一起,明确地定义了它们:大小、存储偏移量和跨距(图2.5)。size(或者shape,用NumPy术语来说)是一个元组,表示张量的每个维度上有多少个元素。存储偏移量是存储中对应于张量中第一个元素的索引。跨距是存储中需要跳过的元素数,以便沿着每个维度获取下一个元素。
2.通过提供相应的索引,可以获得张量中的第二个点生成的张量在存储中有偏移量2(因为我们需要跳过第一个点,它有两个项),而size是包含一个元素的size类的一个实例,因为张量是一维的。重要提示:此信息与张量对象的shape属性中包含的信息相同:
3.stride是一个元组,指示当索引在每个维度中增加1时必须跳过的存储中的元素数。例如,你的点张量有一个步幅:
4.张量和存储之间的这种间接关系导致了一些操作,例如转置张量或提取子矩阵,成本较低,因为它们不会导致内存重新分配;t()函数为向量转置函数
它们只在形状和步幅上有所不同:
从点[0,0]到点[1,0]沿着存储跳跃两个元素,而第二个索引从点[0,0]到点[0,1]沿着存储跳跃一个元素。没有分配新内存:只有通过创建一个新的张量实例来获得转置,该实例的跨距顺序与原始实例不同。
5.PyTorch中的转置不限于矩阵。可以通过指定发生转置(例如翻转形状和跨距)的两个维度来转置多维数组:transpot函数,转换矩阵的两维
6.原矩阵是连续的,但其转置不是:转置并未重新分配存储空间,用的是原来的数据区域,因此数据是不连续的
7.使用连续方法可以从非连续张量中获得新的连续张量。张量的内容保持不变,但步幅会发生变化,存储也会发生变化:
Contiguous方法可以将张量中不连续存储的数据变为连续存储