1

そこで、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

ここで、fonte1fonte2は情報源、1xN配列です。これは、両方のソースに正の整数値しかない例では問題なく機能しましたが、オーディオ ファイル (つまり、値が -1 から 1 の範囲の配列) で使用しようとすると、エラーが発生し続けました。非負の整数を取得するために、各配列に 1 を追加して (0 から 2 の範囲に)、それらを 100 倍して数値を丸めてみましたが、それでも機能しません。

このコードのアイデア/代替案は大歓迎です。

4

0 に答える 0