2013-03-06 40 views
1

gsl_histogram的哪个bin是分配的值,它恰好落在两个bin之间的边上?
例如当我呼叫gsl_histogram_increment(h, x)时,x正好为0,并且bin边缘为-0.2,0,0.2,0.4等,我会在正范围(0,0.2)还是负范围(-0.2,0)中获得增量?gsl_histogram:值等于两个仓之间的边,值将分配给哪个仓?

编辑:是的,我的范围是统一的。

+0

请注意'0.2'不能完全表示。 – PlasmaHH 2013-03-06 11:27:23

回答

2

如果你的bin分布是线性的(如在实施例),那么这是正在执行的代码(从GSL-1.15 /直方图/ find.c截取):

/* optimize for linear case */ 

#ifdef LINEAR_OPT 
    { 
    double u = (x - range[0])/(range[n] - range[0]); 
    i_linear = (size_t) (u * n); 
    } 

    if (x >= range[i_linear] && x < range[i_linear + 1]) 
    { 
     *i = i_linear; 
     return 0; 
    } 
#endif 

注意到> =对于下箱边缘和<为上层纸槽边缘因此你的0.0的值应落入0.0 - 0.2仓

用于执行二进制搜索非线性仓分布,即:

/* perform binary search */ 

    upper = n ; 
    lower = 0 ; 

    while (upper - lower > 1) 
    { 
     mid = (upper + lower)/2 ; 

     if (x >= range[mid]) 
     { 
      lower = mid ; 
     } 
     else 
     { 
      upper = mid ; 
     } 
    } 

    *i = lower ; 

请注意,> =的含义意味着落在bin边上的值将包含在两者的'upper'bin中(与线性情况相同)

可能通过运行您的示例并观察什么仓的值被添加到

+0

+1查找实际来源,这是比谷歌搜索更权威:) – gcbenison 2013-03-06 12:34:46

1

gsl_histogram_incrementappears to use条件L <= x < U来决定是否将值x宾县(L, U)。因此0将最终在(0, 0.2)

+0

+1验证 – damage 2013-03-06 12:43:04

相关问题