在PyTorch中,.contiguous()
方法的作用是确保张量在内存中是连续存储的。当你对张量执行某些操作,如transpose()
、permute()
、narrow()
、expand()
等之后,得到的张量可能不再在内存中连续排列。这些操作通常返回一个张量的视图,它们改变的是数据访问的方式,而不是实际的数据存储方式。
在内存中连续排列的张量有一个特性:对于张量中任意两个相邻的元素,它们在物理内存中的位置也是相邻的。换句话说,张量在物理存储上的排列顺序与在张量形式上的逻辑排列顺序一致。
当调用.contiguous()
时,如果张量已经是连续的,这个函数实际上不会做任何事;但如果不是,PyTorch将会重新分配内存并确保张量的数据连续排列。这涉及到复制数据到新的内存区域,并返回一个新的张量,该张量在内存中实际是连续的。
下面是在Python中对.contiguous()
的一个简单示例:
import torch
# 创建一个非连续张量
x = torch.arange(12).view(3