PyTorch提供了大量的对Tensor进行操作的函数或方法,这些函数内部使用指针实现对矩阵的形状变换,拼接,拆分等操作,使得我们无须关心Tensor在内存的物理结构或者管理指针就可以方便且快速的执行这些操作。
Tensor.nelement(),Tensor.ndimension(),ndimension.size()可分别用来查看矩阵元素的个数,轴的个数(维度数))以及维度,属性Tensor.shape也可以用来查看Tensor的维度。
在PyTorch中,Tensor.reshape和Tensor.view都能被用来更改Tensor的维度。
它们的区别在于,Tensor.view要求Tensor的物理存储必须是连续的,否则将报错,而Tensor.reshape则没有这种要求。 但是,Tensor.view返回的一定是一个索引,更改返回值,则原始值同样被更改,Tensor.reshape返回的是引用还是拷贝是不确定的。
它们的相同之处都接收要输出的维度作为参数,切输出的矩阵元素个数不能改变,可以在维度中输入-1,PyTorch会自动推断它的数值。
建议所有情况下使用reshape
torch.squeeze和torch.unsqueeze用来给Tensor去掉和添加轴(维度)。
torch.squeeze去掉维度为1的轴
torch.unsqueeze用于给Tensor的指定位置添加一个维度为1的轴
torch.t和torch.transpose用于转置二维矩阵。
这两个函数只接收二维Tensor,torch.t是torch.transpose的简化版。
转置矩阵
将矩阵的行列互换得到的新矩阵称为转置矩阵,转置矩阵的行列式不变。
torch.t和torch.transpose用于转置二维矩阵。
这两个函数只接收二维Tensor,torch.t是torch.transpose的简化版。
对于高维度Tensor,可以使用permute方法来变换维度。
PyTorch提供了torch.cat和torch.stack用于拼接矩阵。
torch.cat(tensors, dim): tensors里不同张量对应的待拼接维度的size可以不一致,但是其他维度的size要保持一致。
torch.stack(tensors, dim):tensors里所有张量的维度要保持一致,否则会报错
区别: torch.cat会在dim的维度上进行合并,不会扩展出新的维度。
torch.stack则会在dim的维度上拓展出一个新的维度,然后进行拼接,该维度的大小为tensors的个数。
torch.split和
torch.chunk用于拆分矩阵。
torch.chunk(input, chunks, dim):
chunks是均匀分割的份数,如果在进行分割的维度上的size不能被chunks整除,则最后一份tensor会略小(也可能为空)。
torch.split(input, split_size_or_sections, dim=0):
torch.split()可以说是torch.chunk()的升级版,它不仅可以按份数均匀分割,还可以按特定的方案进行分割。 如果第二个参数是分割份数,这就和torch.chunk()一样了;第二种是分割方案,是一个list类型的数据,待分割的张量将会被分割为len(list)份,每一份的大小取决于list中的元素。