我有 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]。对于一般情况,是否有功能或策略方法可以做到这一点?谢谢!
我有一个向量A = [0,1,2,3,0,0,1,1,2,2,3,3]。我需要以递增的方式对它进行排序,以便它以有序的方式列出,并从中提取 argsort。为了更好地解释这一点,我需要对 A 进行排序,使其返回B = [0,4,5,1,6,7,2,8,9,3,10,11]。但是,当我使用 pyotrch 时,torch.argsort(A)它会返回B = [4,5,0,1,6,7,2,8,9,3,10,11].
我假设这样做的算法无法由我来控制。有没有办法在不引入 for 循环的情况下解决这个问题?此类操作是我的神经网络模型的一部分,如果不能有效完成,将会导致性能问题。谢谢!