快捷鍵

torch.nonzero

torch.nonzero(input, *, out=None, as_tuple=False) LongTensor LongTensor tuple

注意

torch.nonzero(..., as_tuple=False) (預設) 傳回一個 2 維張量,其中每一列都是非零值的索引。

torch.nonzero(..., as_tuple=True) 傳回一個 1 維索引張量的元組,允許進階索引,因此 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

返回一個 1-D 張量的元組,input 中的每個維度都有一個張量,每個張量都包含 input 中所有非零元素(在該維度中)的索引。

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

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

參數

input (Tensor) – 輸入張量。

關鍵字參數

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

返回值

如果 as_tupleFalse,則返回包含索引的輸出張量。 如果 as_tupleTrue,則每個維度返回一個 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]),)

文件

存取 PyTorch 的完整開發人員文件

檢視文件

教學課程

獲取初學者和高級開發人員的深入教學課程

檢視教學課程

資源

查找開發資源並獲得您的問題解答

檢視資源