torch.Tensor.scatter_add_¶
- Tensor.scatter_add_(dim, index, src) Tensor ¶
將 tensor
src
中的所有值,依照index
tensor 指定的索引位置,加到self
中,其方式與scatter_()
類似。 對於src
中的每個值,它會被加到self
中,其索引由src
中該值的索引所指定(當dimension != dim
時),以及由index
中對應的值所指定(當dimension = dim
時)。對於一個 3 維 tensor,
self
會被更新如下:self[index[i][j][k]][j][k] += src[i][j][k] # if dim == 0 self[i][index[i][j][k]][k] += src[i][j][k] # if dim == 1 self[i][j][index[i][j][k]] += src[i][j][k] # if dim == 2
self
、index
和src
應該具有相同的維度數量。 另外,對於所有維度d
,必須滿足index.size(d) <= src.size(d)
,並且對於所有維度d != dim
,必須滿足index.size(d) <= self.size(d)
。 請注意,index
和src
不會進行廣播 (broadcast)。注意
當給定 CUDA 裝置上的 tensors 時,此操作可能表現出不確定性。 請參閱 再現性 以獲取更多資訊。
注意
反向傳播 (backward pass) 僅針對
src.shape == index.shape
實現。- 參數
範例
>>> src = torch.ones((2, 5)) >>> index = torch.tensor([[0, 1, 2, 0, 0]]) >>> torch.zeros(3, 5, dtype=src.dtype).scatter_add_(0, index, src) tensor([[1., 0., 0., 1., 1.], [0., 1., 0., 0., 0.], [0., 0., 1., 0., 0.]]) >>> index = torch.tensor([[0, 1, 2, 0, 0], [0, 1, 2, 2, 2]]) >>> torch.zeros(3, 5, dtype=src.dtype).scatter_add_(0, index, src) tensor([[2., 0., 0., 1., 1.], [0., 2., 0., 0., 0.], [0., 0., 2., 1., 1.]])