首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GSL直方图问题

GSL直方图问题
EN

Stack Overflow用户
提问于 2013-06-28 20:35:33
回答 1查看 300关注 0票数 0

我正在尝试计算一组值的累积分布函数。

我使用gsl计算直方图,并尝试从这里计算CDF,但似乎值移动了一个位置。

这是我使用的代码:

代码语言:javascript
复制
gHist =  gsl_histogram_alloc((maxRange - minRange) / 5);
gsl_histogram_set_ranges_uniform(gHist, minRange, maxRange);

for (int j = 0; j < ValidDataCount; j++)
gsl_histogram_increment (gHist, ValAdd[j]);

gsl_histogram_pdf * p = gsl_histogram_pdf_alloc(gsl_histogram_bins(gHist));
gsl_histogram_pdf_init (p,  gHist);

for (int j = 0; j < gsl_histogram_bins(gHist) + 1 ; j++)
printf ("%f ", p->sum[j]);

直方图是这样的:1 0 0 0 1 0 ...就像这样。总共有20个值

cdf为: 0.00 0.05 0.05 0.05 0.1 ...

为什么第一个位置会有一个0?它不应该从0.05开始吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-08-29 00:09:04

GSL alloc sum是一个大小为n+1的数组,其中n是仓位的数量。然而,计算pdf只需要n个条目。这种额外分配一个元素的原因是gsl定义sum = 0。

在GSL源代码coode "pdf.c“中可以看到

代码语言:javascript
复制
 gsl_histogram_pdf *gsl_histogram_pdf_alloc (const size_t n)
 {
   (...)
   p->sum = (double *) malloc ((n + 1) * sizeof (double));
 }


 int  gsl_histogram_pdf_init (gsl_histogram_pdf * p, const gsl_histogram * h)
 {
   (...)
    p->sum[0] = 0;
    for (i = 0; i < n; i++)
    {
     sum += (h->bin[i] / mean) / n;
     p->sum[i + 1] = sum;
    }
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17364871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档