У меня есть один входной тензор и отображение индекса. Я хочу создать выходной тензор на основе этого отображения индекса.
Например: input = torch.tensor ([12, 56, 45, 37], dtype = torch.float)
index_map = torch.tensor ([- 1, 1, 2, 1, 3, -1]) (-1 в index_map означает, что он не сопоставлен ни с чем)
grad = torch.tensor ([4, 2 , 5, 3, 6, 7], dtype = torch.float)
Я хочу скопировать значения из grad во входные данные на основе index_map. Значения, которые отображаются на один и тот же индекс, должны быть усреднены. Например, grad [1] и grad [3] оба сопоставлены с индексом 1, поэтому конечное значение с индексом 1 должно быть 1,5
Выходной тензор должен быть следующим: тензор ([12., 1,5, 5., 6.])
Мой код:
input = torch.tensor([12, 56, 45, 37], dtype=torch.float)
input = torch.cat([input, torch.tensor([-1], dtype=torch.float)])
index_map = torch.tensor([-1, 1, 2, 1, 3, -1])
grad_out = torch.tensor([4, 2, 5, 3, 6, 7], dtype=torch.float)
input[index_map] = grad_out
input = input[:4]
print(input)
Приведенный выше код копирует последнее значение, но не усредняет его.