функция, которая вычисляет расхождение Кульбака-Лейблера между двумя распределениями в python - PullRequest
0 голосов
/ 04 мая 2020

Я написал функцию, которая вычисляет расхождение Кульбака-Лейблера между двумя распределениями. Однако я не могу понять, как избежать math.log (0) (ошибка математического домена). Функция:


import math
def kullback_leibler(p, q):
    """ Computes Kullback-Leibler divergence between two distributions.
    Both p and q must be dictionaries from events to probabilities.
    The divergence is defined only when q[event] == 0 implies p[event] == 0.
    """
    return sum(p[i] * math.log(p[i]/q[i]) for i in p)

Входные словари:

p = {'A':1.0,'C':0.0,'G':0.0,'T':0.0}
q = {'A':0.25,'C':0.25,'G':0.25,'T':0.25}

Запуск функции жалуется:

math domain error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...