Python numpy 香农熵数组

Python numpy shannon entropy array

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

如何获得香农熵?

我见过这样的,但不确定:

print -np.sum(A * np.log2(A), axis=1)

基本上有两种情况,从您的样本中看不出哪一种适用于此。

(1) 你的概率分布是离散的。然后你必须将相对频率转换为概率

pA = A / A.sum()
Shannon2 = -np.sum(pA*np.log2(pA))

(2) 你的概率分布是连续的。在那种情况下,您输入的值不需要总和为 1。假设输入是从整个 space 中定期采样的,你会得到

pA = A / A.sum()
Shannon2 = -np.sum(pA*np.log2(A))

但在这种情况下,公式实际上取决于抽样的细节和基础 space。

旁注:您示例中的 axis=1 会导致错误,因为您的输入是平坦的。省略。