我有一个Numpy数组:
A = [ 1.56 1.47 1.31 1.16 1.11 1.14 1.06 1.12 1.19 1.06 0.92 0.78
0.6 0.59 0.4 0.03 0.11 0.54 1.17 1.9 2.6 3.28 3.8 4.28
4.71 4.61 4.6 4.41 3.88 3.46 3.04 2.63 2.3 1.75 1.24 1.14
0.97 0.92 0.94 1. 1.15 1.33 1.37 1.48 1.53 1.45 1.32 1.08
1.06 0.98 0.69]
如何获得shannon熵?
我见过这样但不确定:
print -np.sum(A * np.log2(A), axis=1)
答案 0 :(得分:5)
基本上有两种情况,您的样本中不清楚哪种情况适用于此。
(1)你的概率分布是离散的。然后你必须将看似相对频率的东西翻译成概率
pA = A / A.sum()
Shannon2 = -np.sum(pA*np.log2(pA))
(2)你的概率分布是连续的。在这种情况下,输入中的值不需要总和为1。假设输入是从整个空间定期采样的,那么你就得到了
pA = A / A.sum()
Shannon2 = -np.sum(pA*np.log2(A))
但在这种情况下,公式实际上取决于抽样的细节和基础空间。
旁注:示例中的axis=1
会导致错误,因为您的输入是平的。省略它。