小智 6
要计算直方图,您可以使用numpy.histogram()和高斯平滑scipy.ndimage.filters.gaussian_filter().Kullback-Leibler分歧代码可以在这里找到.
计算方法执行所需的计算将如下所示:
import numpy as np
from scipy.ndimage.filters import gaussian_filter
def kl(p, q):
p = np.asarray(p, dtype=np.float)
q = np.asarray(q, dtype=np.float)
return np.sum(np.where(p != 0, p * np.log(p / q), 0))
def smoothed_hist_kl_distance(a, b, nbins=10, sigma=1):
ahist, bhist = (np.histogram(a, bins=nbins)[0],
np.histogram(b, bins=nbins)[0])
asmooth, bsmooth = (gaussian_filter(ahist, sigma),
gaussian_filter(bhist, sigma))
return kl(asmooth, bsmooth)
Run Code Online (Sandbox Code Playgroud)