python numpy shannon熵数组

时间:2017-03-08 22:39:07

标签: python arrays numpy entropy

我有一个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)

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会导致错误,因为您的输入是平的。省略它。