Mub*_*aka 1 python numpy scipy
我正在尝试计算概率分布的信息熵,但我得到了 2 个不同的答案,但我不知道为什么或哪个是正确的。
import numpy as np
from scipy.special import entr
from scipy.stats import entropy
np.random.seed(123)
data = np.random.rand(5)
e = entropy(data,base=2) #this one is different, why?
f = np.sum(entr(data))/np.log(2)
g = -np.sum(data*np.log2(data))
Run Code Online (Sandbox Code Playgroud)
知道错误在哪里吗?
entropy自动对输入进行归一化,使概率向量之和为 1。您对f和的计算结果g并非如此。
如果你标准化data,例如,
data = np.random.rand(5)
data /= data.sum()
Run Code Online (Sandbox Code Playgroud)
结果将一致:
In [35]: data = np.random.rand(5)
In [36]: data /= data.sum()
In [37]: entropy(data, base=2)
Out[37]: 2.2295987226926375
In [38]: np.sum(entr(data))/np.log(2)
Out[38]: 2.2295987226926375
In [39]: -np.sum(data*np.log2(data))
Out[39]: 2.2295987226926375
Run Code Online (Sandbox Code Playgroud)