torch.nonzero¶
- torch.nonzero(input, *, out=None, as_tuple=False) LongTensor or tuple of LongTensors¶
注意
torch.nonzero(..., as_tuple=False)(預設)返回一個二維張量,其中每一行都是非零值的索引。torch.nonzero(..., as_tuple=True)返回一個一維索引張量的元組,允許進行高階索引,因此x[x.nonzero(as_tuple=True)]會給出張量x的所有非零值。返回的元組中,每個索引張量包含特定維度的非零索引。有關這兩種行為的更多詳細資訊,請參見下方。
當
input在 CUDA 上時,torch.nonzero()會導致主機與裝置同步。當
as_tuple為False(預設)時返回一個張量,其中包含
input中所有非零元素的索引。結果中的每一行都包含input中一個非零元素的索引。結果按字典順序排序,最後一個索引變化最快(C 風格)。如果
input有 個維度,則生成的索引張量out的大小為 ,其中 是input張量中非零元素的總數。`當
as_tuple為True時返回一個一維張量的元組,元組中的每個張量對應
input的一個維度,幷包含該維度中所有非零元素的索引。如果
input有 個維度,則返回的元組包含 個大小為 的張量,其中 是input張量中非零元素的總數。`作為特例,當
input具有零維度且為非零標量值時,它被視為具有一個元素的一維張量。- 引數
input (Tensor) – 輸入張量。
- 關鍵字引數
out (LongTensor, 可選) – 包含索引的輸出張量
- 返回
如果
as_tuple為False,則返回包含索引的輸出張量。如果as_tuple為True,則返回每個維度一個一維張量,其中包含沿該維度的每個非零元素的索引。- 返回型別
LongTensor 或 tuple of 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]),)