簡體   English   中英

遍歷numpy矩陣元素

[英]loop through numpy matrix elements

我有以下矩陣,其中每個元素代表特定分數線的概率。 在此處輸入圖片說明

主隊的進球數在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 })

如何在一個易於使用的循環中編寫此代碼? 先感謝您!

您可以使用np.diag提取第k個對角線,然后將其求和。

{str(i):np.sum(np.diag(match_score_matrix,k=i)) for i in range(-15,8)}

考慮在np.diagonal使用offset 因為對角線是主隊和客隊之間的進球數相等時,所以當客隊比主隊高一個進球時,向上偏移一個概率。 相反,當主隊比客隊高出一個目標時,向下偏移一個概率。 因此,將兩個概率相加。

# AWAY ONE GOAL HIGHER
np.sum(np.diagonal(match_score_matrix, offset=1))    
# HOME ONE GOAL HIGHER
np.sum(np.diagonal(match_score_matrix, offset=-1))

# AWAY TWO GOALS HIGHER
np.sum(np.diagonal(match_score_matrix, offset=2))    
# HOME TWO GOALS HIGHER
np.sum(np.diagonal(match_score_matrix, offset=-2))
...

# AWAY MAX GOALS HIGHER USING array.shape
np.sum(np.diagonal(match_score_matrix, offset=match_score_matrix.shape[0]))
# HOME MAX GOALS HIGHER USING array.shape
np.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)}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM