Я написал функцию, которая вычисляет расхождение Кульбака-Лейблера между двумя распределениями. Однако я не могу понять, как избежать 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