我使用torch 1.7.1,我注意到向量化和与循环中的和不同,如果重复这些指标。例如:
import torch
indices = torch.LongTensor([0,1,2,1])
values = torch.FloatTensor([1,1,2,2])
result = torch.FloatTensor([0,0,0])
looped_result = torch.zeros_like(result)
for i in range(indices.shape[0]):
    looped_result[indices[i]] += values[i]
result[indices] += values
print('result:',result)
print('looped result:', looped_result)在以下方面的成果:
 result tensor: ([1., 2., 2.])
 looped result tensor: ([1., 3., 2.])正如您所看到的,环变量有正确的和,而向量化的变量没有。是否可以避免循环而仍然得到正确的结果?
发布于 2022-11-27 21:57:59
这里的问题是,您要在同一个索引上多次索引result,对于这个内部操作,该索引肯定会失败。相反,您需要使用的是index_add or index_add_,例如(作为代码片段的延续):
>>> result_ia = torch.zeros_like(result)
>>> result_ia.index_add_(0, indices, values)
tensor([1., 3., 2.]https://stackoverflow.com/questions/74593825
复制相似问题