【发布时间】:2019-08-14 07:13:58
【问题描述】:
我正在尝试手动计算熵,并且用于存储结果的变量在每次迭代时都会获得一个 NaN 值。我在 matlab 函数中有以下代码 sn-p -
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)。
我在程序的另一部分有完全相同的 sn-p,它采用 1:6 的值并且运行良好。
我还打印了所有 val, val_log, mul 值,它们都不是 NaN 并且按预期打印。 mul 包含大约为 -0.05 的值。
任何帮助表示赞赏。谢谢!
【问题讨论】:
-
freq_norm向量的值是多少?我试过freq_norm = 0.2 * ones(1, 5);并没有得到任何 NaN。 -
如果
freq_norm包含 0,则日志将为 -Inf,然后您将其乘以 0 以获得 NaN。您需要跳过零来计算熵。 -
原来它确实包含一个 0。它有 256 个值,我错过了检查其中的几个。谢谢!
标签: matlab