цикл по элементам матрицы NumPy - PullRequest
0 голосов
/ 16 января 2019

У меня есть следующая матрица, в которой каждый элемент представляет вероятность определенного результата. enter image description here

Количество голов хозяев поля указано по оси 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 })

Как я могу написать это в простом в использовании цикле? Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Рассмотрите возможность использования смещения в np.diagonal. Поскольку диагональ - это когда цели равны между собой между домашней и выездной командами, одно смещение вверх - это вероятность, когда выездная команда на одну цель выше, чем домашняя. И наоборот, одним смещением вниз являются вероятности, когда хозяева на одну цель выше, чем гости. Следовательно, суммируйте две вероятности.

# 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)}
0 голосов
/ 17 января 2019

Вы можете использовать np.diag, чтобы извлечь k -ю диагональ и затем сложить ее.

{str(i):np.sum(np.diag(match_score_matrix,k=i)) for i in range(-15,8)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...