我一直在使用matplotlib.mlab.entropy函数,并注意到mlab代码中可能存在错误。
文档说明计算是:
Entropy formula http://matplotlib.org/_images/mathmpl/math-5c77f15b40.png。
请注意基于两个的日志。根据熵的通常定义,这是正确的。
但是,在mlab.py源中,计算使用的是自然对数:
S = -1.0 * np.sum(p * np.log(p)) + np.log(delta)
当然应该是np.log2()
?
我自己尝试使用其他几种方法进行计算(例如this)。我已经复制并修改了mlab函数,并通过将np.log
更改为np.log2
使其与其他函数保持一致。
因此我认为matplotlib.mlab.entropy不正确。或者我错过了什么?
答案 0 :(得分:0)
没有“正确”的基础。
引用维基百科:“熵通常以比特,自然或禁令来衡量。”以及http://en.wikipedia.org/wiki/Entropy_(information_theory)#Definition
的基数根据我的经验:统计学和计量经济学中的熵几乎总是用自然对数来定义,信号处理中的熵通常用基数2来定义。
scipy.stats
中的相应功能最近获得了一个基本关键字选项,可以从基础e
默认切换到基数2。
答案 1 :(得分:0)
文档不正确,由@ user333700确认。
根据matplotlib-users邮件列表的建议,我提交了pull request来修复文档。