给定矩阵 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))) [矩阵的熵]。
答案 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))