【问题标题】:Scatter homogenous list of values to PyTorch tensor将同质值列表分散到 PyTorch 张量
【发布时间】: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制作合理吗?
  • 当然,非常合理。
  • 让我试试看。

标签: python numpy pytorch


【解决方案1】:

您可以通过修改索引列表以在每个元素中具有相同数量的索引来解决此问题。

max_length = max([len(l) for l in index])
index = [l + l[-1:] * (max_length - len(l)) for l in index]

此代码将重复每个子列表的最后一个元素,直到它们的大小都相同。然后,您可以将其传递给您在问题中所写的 scatter_ 函数。

【讨论】:

    猜你喜欢
    • 2021-02-22
    • 2019-07-29
    • 2020-08-05
    • 2020-11-22
    • 2019-05-23
    • 2022-01-10
    • 2021-06-18
    • 2020-10-02
    相关资源
    最近更新 更多