1

因此,在尝试了一个基于 cicle 的重型函数来计算两个信息源的联合熵之后,我发现了这个有用的 MATLAB 函数accumarray,并尝试了以下代码:

function e = jointEntropy(fonte1, fonte2)
    i = double(fonte1(:))+ 1; 
    j = double(fonte2(:)) + 1; 

    subs = [i j];
    f = accumarray(subs, ones(length(fonte1), 1));
    p = f / length(fonte1);
    freq = f ~= 0;
    prob = p(freq);
    e = -sum(prob.*log2(prob));
end

, wherefonte1fonte2是信息源,1xN数组。这适用于两个源都只有正整数值的示例,但后来我尝试将它与音频文件(即值范围从 -1 到 1 的数组)一起使用,它一直给我一个错误。我尝试将 1 添加到每个数组(范围从 0 到 2),将它们乘以 100 并对数字进行四舍五入,以获得非负整数,但它仍然不起作用。

对此代码的任何想法/替代方案将不胜感激。

4

0 回答 0