【发布时间】:2019-07-22 22:44:33
【问题描述】:
考虑以下列表:
[[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 解决方案是可以接受的
【问题讨论】:
-
用numpy制作合理吗?
-
当然,非常合理。
-
让我试试看。