猿问

循环遍历 numpy 矩阵元素

我有以下矩阵,其中每个元素代表特定得分线的概率。 

y 轴是主队的进球数,x 轴是客队的进球数。例如,0-0 的得分线是 1.21,而 4-3 的得分线是 0.84。我知道主场获胜的概率等于


   np.sum(np.tril(match_score_matrix, -1))

抽签的概率等于:


   np.sum(np.diag(match_score_matrix))

损失的概率等于:


   np.sum(np.triu(match_score_matrix, 1)),

现在,我想知道每个进球差异的概率。在这个矩阵中,以下目标差异结果是可能的 [-6, -5, ..., 0, ..., 15)。如何编写一个循环来计算每个结果的概率?


def get_probabilities(match_score_matrix, max_goals_home, max_goals_away):

    return dict({'max_goals_away': np.something,

                 '-5', np.something,

                 '-4', np.something,

                 ... 

                 '0', np.diag(match_score_matrix)),

                 '1', np.something

                 ...

                 'max_goals_home', np.something })

如何在易于使用的循环中编写它?先感谢您!


慕仙森
浏览 248回答 2
2回答

四季花海

考虑使用 偏移在np.diagonal。因为对角线是当主客队之间的进球数相等时,向上偏移是客队比主队高一球时的概率。相反,当主队比客队高一球时,向下偏移是概率。因此,将两个概率相加。# AWAY ONE GOAL HIGHERnp.sum(np.diagonal(match_score_matrix, offset=1))    # HOME ONE GOAL HIGHERnp.sum(np.diagonal(match_score_matrix, offset=-1))# AWAY TWO GOALS HIGHERnp.sum(np.diagonal(match_score_matrix, offset=2))    # HOME TWO GOALS HIGHERnp.sum(np.diagonal(match_score_matrix, offset=-2))...# AWAY MAX GOALS HIGHER USING array.shapenp.sum(np.diagonal(match_score_matrix, offset=match_score_matrix.shape[0]))# HOME MAX GOALS HIGHER USING array.shapenp.sum(np.diagonal(match_score_matrix, offset=-match_score_matrix.shape[0]))对于您需要的字典,请使用字典理解def get_probabilities(match_score_matrix, max_goals_home, max_goals_away):    # DICTIONARY COMPREHENSION     return {str(i): np.sum(np.diagonal(match_score_matrix, offset=i)) for i in range(-15,15)}

慕斯王

您可以使用np.diag提取第k-th 对角线,然后将其求和。{str(i):np.sum(np.diag(match_score_matrix,k=i)) for i in range(-15,8)}
随时随地看视频慕课网APP

相关分类

Python
我要回答