gpt4 book ai didi

python - 将同质值列表分散到 PyTorch 张量

转载 作者:行者123 更新时间:2023-12-01 14:33:34 34 4
gpt4 key购买 nike

考虑以下列表:

[[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 解决方案是可以接受的

最佳答案

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

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

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

关于python - 将同质值列表分散到 PyTorch 张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54935503/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com