在 PyTorch 中使用 None 索引张量
Indexing a tensor with None in PyTorch
我在 PyTorch 中看到过这种索引张量的语法,但不确定它是什么意思:
v = torch.div(t, n[:, None])
其中 v
、t
和 n
是张量。
这里“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)
.
我在 PyTorch 中看到过这种索引张量的语法,但不确定它是什么意思:
v = torch.div(t, n[:, None])
其中 v
、t
和 n
是张量。
这里“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)
.