scipy.stats.entropy
的文档说:
如果
qk
不是None,则计算Kullback-Leibler散度S = sum(pk * log(pk / qk), axis=0)
。
print(np.sum(p * np.log(p / q), axis=0))
print(entropy(p, q))
但是,我在这里得到两个不同的值:
0.510046080249
0.353272019382
在这两种情况下,应使用基数 e 的对数。那么为什么我会得到两个不同的结果?
答案 0 :(得分:1)
我认为您没有将p
和q
规范化为1.请参见下文:
import numpy as np
from scipy.stats import entropy
p = np.asarray([1,2])
q = np.asarray([2,3])
p_norm = p/np.sum(p)
q_norm = q/np.sum(q)
print(np.sum(p_norm * np.log(p_norm / q_norm), axis=0))
print(entropy(p, q))