基于Matlab的矩阵熵

时间:2011-07-10 08:24:38

标签: matlab

给定矩阵 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 行和< strong> j 矩阵 A 中的col条目。由于矩阵中存在0条目,因此我总是得到 NAN

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

3 个答案:

答案 0 :(得分:5)

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

sum(A(A~=0).*log(A(A~=0)));
编辑:哇,这是一种巧合,我刚刚发布了你的评论。嗯,很高兴你自己解决了这个问题。

答案 1 :(得分:2)

如果它是一个非常大的数组:

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

应该比索引更快。

答案 2 :(得分:1)

另一种可能性:

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