考虑以下列表:
[[3], [1, 2], [4], [0], [2]]
一个尺寸为 (5, 5)
的零张量。
我想要将这些索引根据其在列表中的位置填充到值为1的张量中。
所以,期望输出应该是:
tensor([[0., 0., 0., 1., 0.],
[0., 1., 1., 0., 0.],
[0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0.],
[0., 0., 1., 0., 0.]])
上面发生的事情是这样的:
在索引
[0, 3]
处放置1
(这是我的列表中第一个元素的情况)。
通过使用
Tensor.scatter_
,可以实现非常相似的情况。但是,由于它需要张量作为参数(index
),如果列表中包含与其他元素不同大小的子列表,则无法从列表中创建张量,这正是我列表中[1, 2]
的情况 (这实际上就是问题所在)。如果列表全部具有相同的大小,则可以使用
scatter
方法,如下所示:tensor.scatter_(1, torch.tensor(index), 1)
可以使用Numpy解决方案