如何根据索引向量进行求和

我有三个向量 – 一个求和向量,一个贡献向量和一个值向量。我希望根据贡献向量对值向量进行求和,并将结果放置在求和向量的相应索引中。一个例子是:

A = [0;0] (求和向量), B = [0,0,1,1] (贡献向量) C=[20,30,40,10] (值向量)

输出:A = [20+30;40+10]

其中B向量与C向量的长度相同,它们的对应索引告诉我们将C的值加到A的哪个位置上。

我通过使用for循环实现了这个功能,如下所示:

for index,value in enumerate(C):    A[B[index]]+=value

然而,由于这将是我神经网络模型的前向循环的一部分,它会引起显著的性能问题。特别是我在寻找一种更高效的向量/矩阵排序方法。在上面的例子中,对我有效的方法是:

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]时。对于一般情况,是否有函数或策略可以实现这个功能?谢谢!


回答:

你正在寻找index_add_()

A.index_add_(0, B, C)

请注意,B应当是torch.long类型(它是一个索引向量),而C应当是torch.float类型,与A的类型相同。
此外,如果AC是多维张量,你可以使用第一个dim参数来沿不同维度进行这种求和操作。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注