torch.nonzero¶
- torch.nonzero(input, *, out=None, as_tuple=False) LongTensor 或 LongTensor 元组 ¶
注意
torch.nonzero(..., as_tuple=False)
(默认) 返回一个 2-D 张量,其中每行是非零值的索引。torch.nonzero(..., as_tuple=True)
返回 1-D 索引张量的元组,允许高级索引,因此x[x.nonzero(as_tuple=True)]
给出张量x
的所有非零值。在返回的元组中,每个索引张量包含特定维度的非零索引。请参阅下文以了解有关这两种行为的更多详细信息。
当
input
在 CUDA 上时,torch.nonzero()
会导致主机-设备同步。当
as_tuple
为False
(默认)返回一个张量,其中包含
input
的所有非零元素的索引。结果中的每一行都包含input
中非零元素的索引。结果按字典顺序排序,最后一个索引变化最快(C 风格)。如果
input
具有 维度,则生成的索引张量out
的大小为 ,其中 是input
张量中非零元素的总数。当
as_tuple
为True
返回 1-D 张量元组,
input
中的每个维度一个张量,每个张量都包含input
的所有非零元素的索引(在该维度中)。如果
input
具有 维度,则生成的元组包含 个大小为 的张量,其中 是input
张量中非零元素的总数。作为特殊情况,当
input
具有零维度和非零标量值时,它被视为具有一个元素的一维张量。- 参数
input (Tensor) – 输入张量。
- 关键字参数
out (LongTensor, 可选) – 包含索引的输出张量
- 返回
如果
as_tuple
为False
,则返回包含索引的输出张量。如果as_tuple
为True
,则为每个维度返回一个 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]),)