在 PyTorch 中使用 None 索引张量

Indexing a tensor with None in PyTorch

我在 PyTorch 中看到过这种索引张量的语法,但不确定它是什么意思:

v = torch.div(t, n[:, None])

其中 vtn 是张量。

这里“None”的作用是什么?我似乎无法在文档中找到它。

与 NumPy 类似,您可以通过使用 None 索引该维度来插入单一维度(“解压缩” 维度)。反过来 n[:, None] 将产生在 dim=1 上插入新维度的效果。这相当于 n.unsqueeze(dim=1):

>>> n = torch.rand(3, 100, 100)

>>> n[:, None].shape
(3, 1, 100, 100)

>>> n.unsqueeze(1).shape
(3, 1, 100, 100)

这里有一些其他类型的 None 索引.

在上面的示例中,: 用作占位符以指定第一个维度 dim=0。如果要在 dim=2 上插入维度,可以添加第二个 : 作为 n[:, :, None]

您也可以相对于最后一个维度放置 None。为此,您可以使用 ellipsis 语法 ...:

  • n[..., None] 将最后插入一个维度, n.unsqueeze(dim=-1).

  • n[..., None, :] 在最后一个维度上, n.unsqueeze(dim=-2).