• 文档 >
  • torch >
  • torch.nonzero
快捷键

torch.nonzero

torch.nonzero(input, *, out=None, as_tuple=False) → LongTensor 或 tuple of LongTensors ¶

注意

torch.nonzero(..., as_tuple=False) (默认) 返回一个二维张量,其中每行是零值索引。

torch.nonzero(..., as_tuple=True) 返回一个 1-D 索引张量元组,允许进行高级索引,因此 x[x.nonzero(as_tuple=True)] 返回张量 x 中所有非零值。返回的元组中,每个索引张量包含特定维度的非零索引。

以下将详细介绍这两种行为。

input 在 CUDA 上时, torch.nonzero() 会导致主机-设备同步。

as_tupleFalse (默认)时:

返回一个包含所有非零元素索引的张量。结果中的每一行包含一个非零元素的索引。结果按字典序排序,最后一个索引变化最快(C 风格)。

如果 input 具有 nn 维度,则结果索引张量 out 的大小为 (z×n)(z \times n) ,其中 zzinput 张量中非零元素的总数。

as_tupleTrue 时:

返回一个元组,包含 1-D 张量,每个维度对应一个,每个张量包含 input 中所有非零元素在该维度中的索引。

如果 inputnn 个维度,那么结果元组包含 nn 个大小为 zz 的张量,其中 zzinput 张量中非零元素的总数。

作为特殊情况,当 input 没有维度且有一个非零标量值时,它被视为一个包含一个元素的 1 维张量。

参数:

input (Tensor) – 输入张量。

关键字参数:

out(LongTensor,可选)- 包含索引的输出张量

返回值:

如果 as_tupleFalse ,则包含索引的输出张量。如果 as_tupleTrue ,则对于每个维度,包含每个非零元素在该维度上的索引的 1-D 张量。

返回类型:

LongTensor 或 LongTensor 的元组

示例:

>>> torch.nonzero(torch.tensor([1, 1, 1, 0, 1]))
tensor([[ 0],
        [ 1],
        [ 2],
        [ 4]])
>>> torch.nonzero(torch.tensor([[0.6, 0.0, 0.0, 0.0],
...                             [0.0, 0.4, 0.0, 0.0],
...                             [0.0, 0.0, 1.2, 0.0],
...                             [0.0, 0.0, 0.0,-0.4]]))
tensor([[ 0,  0],
        [ 1,  1],
        [ 2,  2],
        [ 3,  3]])
>>> torch.nonzero(torch.tensor([1, 1, 1, 0, 1]), as_tuple=True)
(tensor([0, 1, 2, 4]),)
>>> torch.nonzero(torch.tensor([[0.6, 0.0, 0.0, 0.0],
...                             [0.0, 0.4, 0.0, 0.0],
...                             [0.0, 0.0, 1.2, 0.0],
...                             [0.0, 0.0, 0.0,-0.4]]), as_tuple=True)
(tensor([0, 1, 2, 3]), tensor([0, 1, 2, 3]))
>>> torch.nonzero(torch.tensor(5), as_tuple=True)
(tensor([0]),)

© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源并获得您的疑问解答

查看资源