python 计算足球队的净获胜数

amrnrhlw  于 2022-12-02  发布在  Python
关注(0)|答案(1)|浏览(155)

作为我正在构建的机器学习架构的一部分,我需要在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

那么很明显,它不会工作。有没有人有任何想法,如何解决这个问题完全并行?就像我说的,我的问题实际上是更复杂的比我在这里所说的。它更接近于想要计算每个球员在每支球队的赢/输总数。如果可能的话,有人可以提供一个解决方案,而不是依赖于只有两支球队在每场比赛。提前感谢。

tpxzln5u

tpxzln5u1#

对于任何看到这个的人,我想出了一个在pytorch中使用“scatter”的解决方案,但是它有点特别。

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)

相关问题