Вот решение.
- Сначала мы создаем массив индексов
B_idx
с таким же размером A
.
- Затем накапливать (добавлять) все элементы в
A
на основе индексов B_idx
, используя index_add_
.
A = torch.arange(1, 8)
B = torch.tensor([2, 3, 2])
B_idx = [idx.repeat(times) for idx, times in zip(torch.arange(len(B)), B)]
B_idx = torch.cat(B_idx) # tensor([0, 0, 1, 1, 1, 2, 2])
A_sum = torch.zeros_like(B)
A_sum.index_add_(dim=0, index=B_idx, source=A)
print(A_sum) # tensor([ 3, 12, 13])