首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环通过numpy矩阵元

循环通过numpy矩阵元
EN

Stack Overflow用户
提问于 2019-01-16 20:55:04
回答 2查看 66关注 0票数 0

我有下面的矩阵,其中每个元素代表一个特定分数的概率。

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

代码语言:javascript
复制
   np.sum(np.tril(match_score_matrix, -1))

抽签的概率等于:

代码语言:javascript
复制
   np.sum(np.diag(match_score_matrix))

损失的概率等于:

代码语言:javascript
复制
   np.sum(np.triu(match_score_matrix, 1)),

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

代码语言:javascript
复制
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 })

我如何在一个易于使用的循环中写这个呢?提前谢谢你!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-16 21:34:37

考虑在np.diagonal中使用偏移量。因为对角线是当主队和客场队的进球相等时,当客场队比主队高一个进球时,一个对角线向上抵消的概率。相反地,当主队比客场队高出一个目标时,一个向下抵消的概率是可能的。因此,把这两个概率相加。

代码语言:javascript
复制
# 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]))

对于您需要的字典,请使用字典理解。

代码语言:javascript
复制
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)}
票数 1
EN

Stack Overflow用户

发布于 2019-01-16 21:29:16

您可以使用np.diag提取k-th对角线,然后对其进行求和。

代码语言:javascript
复制
{str(i):np.sum(np.diag(match_score_matrix,k=i)) for i in range(-15,8)}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54225235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档