快捷方式

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 風格)。

如果 inputnn 個維度,則生成的索引張量 out 的大小為 (z×n)(z \times n),其中 zzinput 張量中非零元素的總數。`

as_tuple True

返回一個一維張量的元組,元組中的每個張量對應 input 的一個維度,幷包含該維度中所有非零元素的索引。

如果 inputnn 個維度,則返回的元組包含 nn 個大小為 zz 的張量,其中 zzinput 張量中非零元素的總數。`

作為特例,當 input 具有零維度且為非零標量值時,它被視為具有一個元素的一維張量。

引數

input (Tensor) – 輸入張量。

關鍵字引數

out (LongTensor, 可選) – 包含索引的輸出張量

返回

如果 as_tupleFalse,則返回包含索引的輸出張量。如果 as_tupleTrue,則返回每個維度一個一維張量,其中包含沿該維度的每個非零元素的索引。

返回型別

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]),)

文件

訪問 PyTorch 的全面開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源