2.1. 数据操作




首先,我们导入 torch
import torch
张量表示由一个数值组成的数组,这个数组可能有多个维度。
x = torch.arange(12)xtensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
可以通过张量的 shape 属性来访问张量的形状 (沿每个轴的长度)。
x.shapetorch.Size([12])
如果只想知道张量中元素的总数,即形状的所有元素乘积,可以检查它的大小(size)
x.numel()
要改变一个张量的形状而不改变元素数量和元素值,可以调用 reshape 函数
X = x.reshape(3, 4)Xtensor([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]])
张量在给出其他部分后可以自动计算出一个维度。我们可以通过在希望张量自动推断的维度放置-1来调用此功能。在上面的例子中,我们可以用x.reshape(-1,4)或x.reshape(3,-1)来取代x.reshape(3,4)
有时,我们希望使用全0、全1、其他常量或者从特定分布中随机采样的数字来初始化矩阵。我们可以创建一个形状为 (2, 3, 4) 的张量,其中所有元素都设置为0。
torch.zeros((2, 3, 4))tensor([[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]],[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]]])
我们可以创建一个形状为(2,3,4)的张量,其中所有元素都设置为1
torch.ones((2, 3, 4))
随机采样:创建一个形状为 (3, 4) 的张量。其中的每个元素都服从均值为0、标准差为1的标准高斯(正态)分布中随机采样。
torch.randn(3,4)tensor([[ 2.1989, -1.7897, 0.1334, 0.3321],[-0.8310, -1.3844, -1.5919, 0.1396],[-0.3225, -1.4449, 1.1404, 1.0962]])
可以通过提供包含数值的 Python 列表(或嵌套列表)来为所需张量中的每个元素赋予确定值。在这里,最外层的列表对应于轴 0,内层的列表对应于轴 1。
torch.tensor([[1,2,3],[2,3,4],[4,5,6]])tensor([[1, 2, 3],[2, 3, 4],[4, 5, 6]])
按元素运算
x = torch.tensor([1.0, 2, 4, 8])y = torch.tensor([2, 2, 2, 2])x + y, x - y, x * y, x / y, x**y # **运算符是求幂运算torch.exp(x) # 求幂
把多个张量 连结(concatenate) 在一起,沿行(轴-0,形状的第一个元素)和按列(轴-1,形状的第二个元素)连结两个矩阵
X = torch.arange(12, dtype=torch.float32).reshape((3, 4))Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)
通过 逻辑运算符 构建二元张量
X == Y
广播机制
由于 a 和 b 分别是 3×1和 1×2矩阵,如果我们让它们相加,它们的形状不匹配。我们将两个矩阵广播为一个更大的 3×2 矩阵,如下所示:矩阵 a将复制列,矩阵 b将复制行,然后再按元素相加。
