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