【问题标题】:Entropy of Matrix using Matlab矩阵的熵使用 Matlab
【发布时间】:2011-07-10 08:24:38
【问题描述】:

给定一个矩阵 A,维度为 m x n,矩阵中的条目位于 [0,1]
例如

A = [0.5 0   0  0.5 0
     0   0.5 0  0   0.5
     1   0   0  0   0]

我想计算 sum(sum(a_ij log(a_ij))),其中 a_ij 是第 i 行,j 矩阵 A 中的第 5 列条目。由于矩阵中存在 0 条目,因此我总是得到 NAN

我如何只考虑非零项来计算 sum(sum(a_ij log(a_ij))) [矩阵的熵]。

【问题讨论】:

  • 我想出了下面的matlab代码sum(A(A~=0).*log(A(A~=0)))

标签: matlab


【解决方案1】:

要仅考虑矩阵的特定元素,您可以使用逻辑索引。例如,如果您只想选择 A 的非零条目,您可以使用A(A~=0)。因此,对于您的问题,可以编写解决方案:

sum(A(A~=0).*log(A(A~=0)));

编辑:哇,这是某种巧合,我刚刚在发布此评论后看到了您的评论。嗯,很高兴你自己解决了。

【讨论】:

  • 是的,我在发布问题后又尝试了几次。感谢您的努力。
  • 好答案,但根据A 的大小,最好将表达式A~=0 存储在临时变量中以避免计算两次。
【解决方案2】:

如果是非常大的数组:

sum(A.*log(A+eps))  

这应该比索引更快。

【讨论】:

    【解决方案3】:

    另一种可能性:

    x = A(:);
    E = x' * log(x + (x==0))
    

    【讨论】:

      猜你喜欢
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 2015-02-04
      相关资源
      最近更新 更多