pytorch中scatter()、scatter_()详解

scatter()、scatter_()

scatter() 和 scatter_() 的作用一样。
不同之处在于 scatter() 不会直接修改原来的 Tensor,而 scatter_() 会在原来的基础上对Tensor进行修改。

torch.scatter()官方文档

scatter(dim, index, src)src中数据根据index中的索引按照dim的方向进行填充。

dim=0
# 填充规则(dim=0)
self[ index[i][j] ] [j] = src[i][j]

在这里插入图片描述
在这里插入图片描述

dim=1
# 填充规则(dim=1)
self [i] [ index[i][j] ] = src[i][j]

在这里插入图片描述
在这里插入图片描述

注:index必须是torch.LongTensor类型

index行数必须和src行数相同,且下标不能超过output的列数。
index列数不受限制

src列数必须要小于等于进行填充的tensor列数(或者只是一个标量也可以)。
在这里插入图片描述

scatter() 用于 one-hot 编码

这就是一个典型的用标量来修改张量的一个例子。

class_num = 10
batch_size = 4
label = torch.LongTensor(batch_size, 1).random_() % class_num
#tensor([[6],
#        [0],
#        [3],
#        [2]])
torch.zeros(batch_size, class_num).scatter_(1, label, 1)
#tensor([[0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],
#        [1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
#        [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
#        [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.]])
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值