Рассмотрим следующий список:
[[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 решения