作为我正在构建的机器学习架构的一部分,我需要在pytorch中并行化一个特定的计算。为了简单起见,我将陈述这个问题的一个修改版本,并使用numpy,这样更容易理解。
假设我有一个足球队的集合(比如10个),他们进行了一系列比赛(比如20场)。每个足球队用一个ID(1-10之间的数字)表示。比赛结果保存为元组(t_1, t_2, win)
,其中t_i
是'team i'的ID(int),如果队1赢,则win=1(如果队2赢,则win=-1)。
我想计算每支球队的总胜数。更具体地说,我想得到一个numpy数组X
(形状为(10)),其中X[t_i]
:= wins -loss(20场比赛中“team i”的)。假设比赛数据被拆分为numpy数组match
(形状为(20,2))和outcome
(形状为(20,1)),我目前解决此问题的方法如下所示
outcome = np.concatenate((outcome, -outcome), axis=1)
for i in range(20):
X[match[i]] += outcome[i]
现在你可以猜到,我想去掉for循环。
X[match] += outcome
那么很明显,它不会工作。有没有人有任何想法,如何解决这个问题完全并行?就像我说的,我的问题实际上是更复杂的比我在这里所说的。它更接近于想要计算每个球员在每支球队的赢/输总数。如果可能的话,有人可以提供一个解决方案,而不是依赖于只有两支球队在每场比赛。提前感谢。
1条答案
按热度按时间tpxzln5u1#
对于任何看到这个的人,我想出了一个在pytorch中使用“scatter”的解决方案,但是它有点特别。