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)中得到增量吗?

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

4

2 回答 2

3

如果您的 bin 分布是线性的(如您的示例所示),那么这是正在执行的代码(取自 gsl-1.15/histogram/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

请注意 >= 用于下 bin 边缘,而 < 用于上 bin 边缘,因此您的 0.0 值应该落入 0.0 - 0.2 bin

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

  /* 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 边缘的值将包含在两者的“上”bin 中(与线性情况相同)

也许通过运行您的示例并观察将值添加到哪个 bin 来仔细检查

于 2013-03-06T12:32:28.803 回答
1

gsl_histogram_increment 似乎使用条件L <= x < U来决定是否将值x放入 bin (L, U)。所以0最终会在(0, 0.2).

于 2013-03-06T12:33:14.850 回答