计算足球队的净胜率



作为我正在构建的机器学习架构的一部分,我需要在pytorch中并行化某些计算。为简单起见,我将陈述问题的修改版本,并使用numpy,以便更容易理解。

假设我有一组足球队(假设10支),他们进行一组比赛(假设20场)。每个足球队由一个ID(1-10之间的数字)表示。比赛结果保存为元组(t_1, t_2, win),其中t_i是'team i'的ID (int),如果team 1获胜,则win=1(如果team 2获胜,则win=-1)。

我想计算每个队的总胜场数。更具体地说,我想要一个numpy数组X(形状(10)),其中X[t_i]:=赢-输(来自20场比赛的"团队I")。假设匹配数据被分成numpy数组match(of shape(20,2))和outcome(of shape(20,1)),我目前解决这个问题的方法如下

outcome = np.concatenate((outcome, -outcome), axis=1)
for i in range(20):
X[match[i]] += outcome[i]

现在你可以猜到,我想摆脱for循环。如果我要用

替换这段代码
X[match] += outcome

那么显然它不会工作。有人有什么办法可以完全并行地解决这个问题吗?就像我说的,我的问题实际上比我在这里陈述的要复杂得多。这更接近于计算每支球队中每个球员的输赢总数。如果可能的话,有人能提供一个不依赖于每场比赛只有两支球队的解决方案吗?提前谢谢。

对于任何看到这一点的人,我在pytorch中使用'scatter'找到了一个解决方案,但是它有点特别。下面是numpy的等效代码。

outcome = np.concatenate((outcome, -outcome), axis=1)
temp = np.put_along_axis(np.zeros((20, 10)), match, outcomes, 1)
scores = np.sum(temp, axis=0)

最新更新