C语言hist()函数第2篇

参考:解释hist(y,x)的返回值的含义https://www.ilovematlab.cn/thread-297325-1-1.html
先来一份matlab代码
在这里插入图片描述
解析如下:x为一个向量,向量个数为3,于是y被分成了3份,3个容器的间隔分别为 **(-Inf, ( x(1)+x(2) ) / 2 ] , **
( x(1)+x(2)/2, (x(2)+x(3))/ 2 ], ( (x(2)+x(3) )/2, Inf),也就是 **(-lnf,2.5],(2.5, 3.5] ,(3.5,lnf). **
y中元素数值落在这三个区间的个数分别为2,1,0个

在这里插入图片描述
同理,落在这三个区间的个数为4,2,0个
既然原理已经明白,那么开始写成C语言吧


#include <stdio.h>
#include <stdlib.h> 
int *hist_num;
//float *hist_mean ;
void hist(float* Y_in,int Yin_len,float* X_in,int Xin_len)
{ 
 int i,j;
hist_num = (int*)malloc(sizeof(int));
 //hist_mean = (float*)malloc(sizeof(float));
for(j = 0; j< Xin_len;j++)
{
   hist_num = (int*)realloc(hist_num,sizeof(int)*(j+1) );
       //hist_mean = (float*)realloc(hist_mean,sizeof(float)*(j+1) );
   hist_num[j] = 0; //初始化 
   for(i = 0; i< Yin_len;i++)
   {
     if(j == 0) //(-lnf, (X[0]+X[1])/2]
      {
 	if( Y_in[i] <=  (X_in[j] + X_in[j+1])/2) 
          hist_num[j] = hist_num[j] +1;
      }
    else if(j == (Xin_len - 1))//(  (X[j-1]+X[j])/2, lnf)
    {
     	if(  (X_in[j-1]+X_in[j])/2  < Y_in[i] )
           hist_num[j] = hist_num[j] +1;
    }
    else  //( ],( ].....( ]------((X[j-1]+X[j])/2 ,(X[j]+X[j+1])/2]
    {
        if(  (   (X_in[j-1]+X_in[j])/2 < Y_in[i]  ) &&  ( Y_in[i] <=  (X_in[j] + X_in[j+1])/2  ) )
          hist_num[j] = hist_num[j] +1;
    }
   }
 }
}
int main(void)
{
 float aa[] = {0.1 ,1.2 ,2.1 ,2.5, 2.6 ,3.5};              
 float Xin[] = {2.0,3.0,4};
 int len;
 int i;   
 int aa_len = sizeof(aa)/sizeof(float);
 int Xin_len = sizeof(Xin)/sizeof(float);
 hist(aa,aa_len,Xin,Xin_len);
 printf("hist_num = ");
for(i = 0; i<Xin_len;i++)
 {
   printf(" %d  ",hist_num[i]);   
 }
 
 printf("\n");
 printf("Xout = ");
 
 for(i = 0; i<Xin_len;i++)
 {
   printf(" %f  ",Xin[i]);   
 }
 
 printf("\n");
 free(hist_num);
 //free(hist_mean);
 return 0;
}

运行结果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭飞万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值