matlab中如何计算两组数据的互信息,或者如何计算联合熵,为什么我算出来都是负值 求解!!急

下面是部分代码 计算m与m2的互信息mi
m=[78.3 13.2 4.32 4.32 72 24.5 33.9 679 143 20 26.7 46.9 230 159.8 128 215.6 139 139 70.2 129.6 ]
mm=hist(m)/10;
mm
mm(mm==0) = [ ];
mm
Hm = -sum(mm.*log2(mm));
Hm
m2=[78.61 96.98 81.86 82.91 81.35 83.95 78.76 85.72 83.98 84.47 84.73 76.14 124.69 124.69 124.69 623.47 124.69 124.69 18.75 630.02 ]
format shortG %这个1.0e+03 *是“1000乘”的意思你可以调整显示格式:format shortg或者format longg更多显示格式参见format函数的说明
m2
if max(max(m2))~=min(min(m2))
m2 = (m2-min(min(m2)))/(max(max(m2))-min(min(m2)));
end
m2
mm2=hist(m2)/10;
mm2
mm2(mm2==0) = [ ];
mm2
Hm2 = -sum(mm2.*log2(mm2));
Hm2
% 联合熵
for i=1:length(mm)
for j=1:length(mm2)
L(i,j)=mm(i)*mm2(j);
end
end
Hab=-sum(sum(L.*log2(L)));
disp('Hab信源联合熵为:');
Hab
%计算a和b的互信息
mi =( Hm+Hm2)-Hab;
mi

第1个回答  2017-12-15
L(i,j)=mm(i)*mm2(j); 这一条意味着两个变量相互独立,最终答案肯定为0,
m=[78.3 13.2 4.32 4.32 72 24.5 33.9 679 143 20 26.7 46.9 230 159.8 128 215.6 139 139 70.2 129.6 ];
m = mapminmax(m,0,1);
m2=[78.61 96.98 81.86 82.91 81.35 83.95 78.76 85.72 83.98 84.47 84.73 76.14 124.69 124.69 124.69 623.47 124.69 124.69 18.75 630.02 ];
m2 = mapminmax(m2,0,1);
Y=hist3([m',m2'])/100;
mm=sum(Y,1);
mm2=sum(Y,2);
mm2=mm2';
%
% mm=hist(m)/10;
% mm
mm(mm==0) = [ ];
% mm
Hm = -sum(mm.*log2(mm));
Hm
mm2(mm2==0) = [ ];
mm2
Hm2 = -sum(mm2.*log2(mm2));
Hm2
Y=reshape(Y,1,100);
Y(Y==0)=[];
Hab=-sum(sum(Y.*log2(Y)));
disp('Hab信源联合熵为:');
Hab
%计算a和b的互信息
mi =( Hm+Hm2)-Hab;
mi
第2个回答  2015-07-28
main()
{
float n,s=0,t=1;
for(n=1;n<=20;n++)
 {
 t*=n;
 s+=t;
 }追问

这是什么呢

本回答被网友采纳
第3个回答  2017-12-15
楼主为什么只对m2归一化,没有对m归一化呢
相似回答