msh*_*ibi 4 python machine-learning pytorch
我有 3 个向量 - 一个和向量、一个贡献向量和一个值向量。我想根据它们的贡献向量对值向量进行求和,并将它们放在和向量中相应的索引中。一个例子是:
A = [0;0] (sum vector), B = [0,0,1,1] (contribution vector) C=[20,30,40,10] (value vector)
输出:
A = [20+30;40+10]
这样 B 向量与 C 的长度相同,它们相应的索引告诉我们要添加到 A 中的哪个位置。
我可以通过 for 循环来实现这一点:
for index,value in enumerate(C):
A[B[index]]+=value
Run Code Online (Sandbox Code Playgroud)
然而,由于这将是我的神经网络模型前向循环的一部分,因此它将导致严重的性能问题。具体来说,我正在寻找一种更有效的向量/矩阵排序方法。在上面的例子中,对我来说有效的方法是:
A=torch.zeros(2,1)
C=C.reshape(2,2)
sum=torch.sum(C,1).reshape(2,1)
A += sum
Run Code Online (Sandbox Code Playgroud)
然而,我遇到了问题,因为 A 的索引并不总是具有相同的贡献。B = [0,0,0,1,1]例如 -和的情况C=[20,30,40,10,50]。对于一般情况,是否有功能或策略方法可以做到这一点?谢谢!
您正在寻找index_add_()
A.index_add_(0, B, C)
Run Code Online (Sandbox Code Playgroud)
请注意,B应该是 类型torch.long(它是一个索引向量),并且C应该是 类型torch.float,与 的类型相同A。此外,如果和是多维张量,
您可以使用第一个dim参数沿不同维度进行求和。AC
| 归档时间: |
|
| 查看次数: |
3533 次 |
| 最近记录: |