そこで、2 つの情報源の結合エントロピーを計算するためのシクルベースの重い関数を試した後、この便利な 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 倍して数値を丸めてみましたが、それでも機能しません。
このコードのアイデア/代替案は大歓迎です。