【发布时间】:2019-09-13 02:24:06
【问题描述】:
我有 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
但是,由于这将是我的 NN 模型前向循环的一部分,因此会导致严重的性能问题。具体来说,我正在寻找一种更有效的向量/矩阵排序方法。在上面的示例中,对我有效的方法是:
A=torch.zeros(2,1)
C=C.reshape(2,2)
sum=torch.sum(C,1).reshape(2,1)
A += sum
但是,我遇到了一些问题,因为 A 的索引并不总是具有相同的贡献。例如 - B = [0,0,0,1,1] 和 C=[20,30,40,10,50] 的情况。对于一般情况,是否有功能或战略方法可以做到这一点?谢谢!
【问题讨论】:
-
循环可能不会导致严重的性能问题,尤其是如果您使用 jit pytorch.org/docs/stable/jit.html
标签: python machine-learning pytorch