Переменная, назначенная в NaN в итерации цикла - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь вычислить энтропию вручную, и моя переменная для сохранения результата получает значение NaN на каждой итерации.У меня есть следующий фрагмент кода в функции Matlab -

entropy = 0.0;
%Calculating entropy...
for i = 1:size(freq_norm)
    val = freq_norm(i);
    val_log = log2(val);
    mul = val * val_log;
    entropy = entropy - mul;
    disp(['VALUE: ',num2str(entropy)]);
end

Здесь freq_norm - это вектор, который состоит из значений, сумма которых равна 1 (например, PDF).У меня точно такой же фрагмент в другой части программы, которая имеет значения 1: 6 и работает отлично.Я также распечатал все значения val, val_log, mul, и ни одно из них не является NaN и напечатано, как ожидалось.mul содержит значения, которые приблизительно равны -0,05.

Любая помощь приветствуется.Спасибо!

1 Ответ

1 голос
/ 23 марта 2019

Функция log2 возвращает NaN, возможно, потому, что в какой-то момент вы пытаетесь взять лог 0 (то есть -Inf) и умножить на 0.

Смотрите это пример для справки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...