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時返回一個由 1-D 張量組成的元組,每個張量對應
input中的一個維度,其中包含input中所有非零元素(在該維度上)的索引。如果
input有 個維度,則返回的元組包含 個大小為 的張量,其中 是input張量中非零元素的總數。作為特例,當
input的維度為零且其值為非零標量時,它被視為一個只有一個元素的 1 維張量。- 引數
input (Tensor) – 輸入張量。
- 關鍵字引數
out (LongTensor, optional) – 包含索引的輸出張量
- 返回
如果
as_tuple為False,則為包含索引的輸出張量。如果as_tuple為True,則為每個維度建立一個 1-D 張量,包含沿該維度每個非零元素的索引。- 返回型別
LongTensor 或 LongTensor 的 tuple
示例
>>> 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]),)