【问题标题】:Variable assigned in NaN in loop iteration在循环迭代中以 NaN 分配的变量
【发布时间】: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


【解决方案1】:

log2 函数返回 NaN,可能是因为在某些时候您试图获取 0(即 -Inf)的对数并乘以 0。

请参阅此example 以供参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2022-01-23
    • 2014-11-09
    相关资源
    最近更新 更多