因此,在尝试了一个基于 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
, wherefonte1
和fonte2
是信息源,1xN
数组。这适用于两个源都只有正整数值的示例,但后来我尝试将它与音频文件(即值范围从 -1 到 1 的数组)一起使用,它一直给我一个错误。我尝试将 1 添加到每个数组(范围从 0 到 2),将它们乘以 100 并对数字进行四舍五入,以获得非负整数,但它仍然不起作用。
对此代码的任何想法/替代方案将不胜感激。