分配给 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)中得到增量吗?
编辑:是的,我的范围是统一的。
如果您的 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 来仔细检查
gsl_histogram_increment
似乎使用条件L <= x < U
来决定是否将值x
放入 bin (L, U)
。所以0
最终会在(0, 0.2)
.