2015-05-29 6 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 

например: 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

@ На самом деле, моя ошибка –