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 風格)。如果
input
有 個維度,則產生的索引張量out
的大小為 ,其中 是input
張量中非零元素的總數。當
as_tuple
為True
返回一個 1-D 張量的元組,
input
中的每個維度都有一個張量,每個張量都包含input
中所有非零元素(在該維度中)的索引。如果
input
有 個維度,則產生的元組包含 個大小為 的張量,其中 是input
張量中非零元素的總數。作為一個特例,當
input
具有零維度和非零純量值時,它被視為具有一個元素的一維張量。- 參數
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]),)