2015-05-29 45 views
2

我写了一个函数来计算向量的熵,其中每个元素表示一个类的元素的数量。纯分裂的熵计算为NaN

function x = Entropy(a) 
    t = sum(a); 
    t = repmat(t, [1, size(a, 2)]); 
    x = sum(-a./t .* log2(a./t)); 
end 

e.g:a = [4 0],然后entropy = -(0/4)*log2(0/4) - (4/4)*log2(4/4)

但对于上述功能,熵是NaN当分割是因为纯的log2(0),如在上面的示例。纯分裂的熵应该是零。

由于数据量非常大,我应该如何解决对性能影响最小的问题?由于

回答

0

我建议你创建自己的log2功能

function res=mylog2(a) 
    res=log2(a); 
    res(isinf(res))=0; 
end 

此功能,同时打破了log2行为,可以在你的具体的例子,因为你是与日志的内乘的结果中,从而使其为零。这不是“数学上正确的”,但我相信这就是你正在寻找的。

+0

谢谢,但我不得不将它编辑为'res(isinf(res))= 0',因为log2(0)= -inf。 – Newbie

+0

@Newbie确实,我的错误 –