信息论求信息熵相关MATLAB代码

% 假设的联合概率分布矩阵 P(X,Y) 

P_XY = [0.25, 0, 0, 0;   

        0.1, 0.3, 0,0;  

        0, 0.05, 0.1, 0;

        0,0,0.05,0.1;

        0,0,0.05,0];  

% 计算边缘概率分布 P(X) 和 P(Y)  

PX = sum(P_XY, 2); % 对P_XY的每一行求和得到P(X)  

PY = sum(P_XY, 1); % 对P_XY的每一列求和得到P(Y),但我们需要转置结果以匹配PX的维度  

PY = PY'; % 转置PY以匹配PX的维度

% 计算熵 H(X) 和 H(Y)  

H_X = -sum(PX .* log2(PX + eps)); % 使用eps避免对0取对数  

H_Y = -sum(PY .* log2(PY + eps));  

% 计算联合熵 H(XY)  

H_XY = -sum(sum(P_XY .* log2(P_XY + eps)));  

% 计算条件熵 H(Y|X)  

H_Y_given_X = zeros(size(PX, 1), 1);  

for i = 1:size(PX, 1)  

    if PX(i) > 0  

        H_Y_given_X(i) = -sum(P_XY(i,:) ./ PX(i) .* log2(P_XY(i,:) ./ PX(i) + eps));  

    else  

        % 如果PX(i)为0,则条件熵在该点未定义(或可以视为0,取决于上下文)  

        % 这里我们简单地将其设为0  

        H_Y_given_X(i) = 0;  

    end  

end  

H_Y_given_X_avg = sum(PX .* H_Y_given_X); % 对H_Y_given_X加权平均得到H(Y|X)  

 % 计算条件熵 H(X|Y)  

H_X_given_Y = zeros(size(PY, 1), 1);  

for i = 1:size(PY, 1)  

    if PY(i) > 0  

        H_X_given_Y(i) = -sum(P_XY(:,i) ./ PY(i) .* log2(P_XY(:,i) ./ PY(i) + eps));  

    else  

        H_X_given_Y(i) = 0; % PY(i)为0时条件熵未定义,这里设为0  

    end  

end  

H_X_given_Y_avg = sum(PY .* H_X_given_Y);

% 显示结果  

disp('H(X) =');  

disp(H_X);  

disp('H(Y) =');  

disp(H_Y);  

disp('H(XY) =');  

disp(H_XY);  

disp('H(Y|X) =');  

disp(H_Y_given_X_avg);

disp('H(X|Y) =');  

disp(H_X_given_Y_avg);

36f5370d11de479ea9f915e53f5e9c91.png

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值