Копирование значений из одного тензора в другой на основе сопоставления индекса и усреднения значений, сопоставленных с тем же индексом - PullRequest
1 голос
/ 11 февраля 2020

У меня есть один входной тензор и отображение индекса. Я хочу создать выходной тензор на основе этого отображения индекса.

Например: 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)

Приведенный выше код копирует последнее значение, но не усредняет его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...