基于Matlab的矩阵熵

Lea*_*ner 2 matlab

给定具有维度mxn的矩阵A并且矩阵中的条目位于[0,1] 例如

A = [0.5 0   0  0.5 0
     0   0.5 0  0   0.5
     1   0   0  0   0]
Run Code Online (Sandbox Code Playgroud)

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

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

Aab*_*baz 5

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

sum(A(A~=0).*log(A(A~=0)));
Run Code Online (Sandbox Code Playgroud)

编辑:哇,这是一种巧合,我刚刚发布这条评论后看到你的评论.嗯,很高兴你自己解决了这个问题.

  • 很好的答案,但根据`A`的大小,最好将表达式'A~ = 0`存储在临时变量中以避免计算两次. (4认同)