(一)用C语言实现:信息熵的计算
(1) 信息熵的数学表达
1.1 自信息数学表达:
设离散信源X,其概率空间为:
如果知道事件xi已发生,则该事件所含有的自信息定义为:
1.2 信息熵数学表达:
平均信息量—信源熵:自信息的数学期望。
信息熵的单位:比特/符号。
(2) C语言实现信息熵计算
2.1 实现的功能
实现:可以输入任意的信源数量,以及对应数量的空间概率,从而求得任意的信息熵。
2.2 代码部分
#include <math.h>
#include <stdio.h>
#define LOG_N 2
float self_info2(float p[],int *r);
int main(){
int input_number=0;
int output_number;
int *r;
float p[input_number];
float H=0;
printf("input X number:\n");
scanf("%d",&input_number);
for(int i=0;i<(input_number);i++)
{
printf("input P(x):\n");
scanf("%f",&p[i]);
*r=i;
H+=self_info2(p,r);
printf("return %f\n",self_info2(p,r));
}
printf("H(x) result is:%f",H);
return 0;
}
//求以N为底的,单个概率P的自信息
float self_info2(float p[],int *r){
int i;
i=*r;
return -p[i]*(log(p[i])/log(LOG_N));
}
2.3 实现结果:
信源数量为2时:
信源数量为3时:
更多推荐
用C语言实现:信息熵的计算(通过输入任意信源数量和相应的概率得到)
发布评论