【问题标题】:Python numpy shannon entropy arrayPython numpy shannon熵数组
【发布时间】:2017-03-08 22:39:06
【问题描述】:

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

【问题讨论】:

  • 提到的A变量不是numpy数组

标签: python arrays numpy entropy


【解决方案1】:

基本上有两种情况,从您的示例中不清楚哪种情况适用于此。

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

【讨论】:

  • @Paul Panzer。您能否详细说明什么是离散和连续的。具体来说,如果我有一个来自受试者在每个箱子中花费的时间的 2 个直方图。那是离散的还是连续的。具体来说,我有一个 4x4 的网格,一个主题在每个 bin 中花费了相同的时间。如果我将该 2 直方图转换为列表,您将有 16 个值。您会将其分析为离散的还是连续的?
  • @Punter345 bins 是离散的。连续分布的不同之处在于概率“按表面积归一化”,将其视为将其分割成更小的箱,以便在单个点上获得概率。要获得有意义的限制,您必须通过 binsize 进行归一化,这就是为什么连续的行为不同于离散的原因。如果你想完全理解这些东西,恐怕你必须阅读它。
  • 感谢@Paul Panzer。我读过几篇学术论文。我了解熵的概念,只是不知道哪些算法适用于不同的情况。我读到的每个方程式都有一些不同的调整。具体来说,我的示例将表面积拆分为 1m 平方值,并返回在这些垃圾箱中花费的每一秒的计数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
  • 2013-03-30
  • 1970-01-01
  • 2022-01-26
  • 2021-11-24
相关资源
最近更新 更多