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:值等于两个仓之间的边,值将分配给哪个仓?
编辑:是的,我的范围是统一的。
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:值等于两个仓之间的边,值将分配给哪个仓?
编辑:是的,我的范围是统一的。
如果你的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中(与线性情况相同)
可能通过运行您的示例并观察什么仓的值被添加到
+1查找实际来源,这是比谷歌搜索更权威:) – gcbenison 2013-03-06 12:34:46
gsl_histogram_increment
appears to use条件L <= x < U
来决定是否将值x
宾县(L, U)
。因此0
将最终在(0, 0.2)
。
+1验证 – damage 2013-03-06 12:43:04
请注意'0.2'不能完全表示。 – PlasmaHH 2013-03-06 11:27:23