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