gsl_histogram: значение, равное ребру между двумя ячейками, какой ячейке будет присвоено значение?

Какой ячейке гистограммы gsl_histogram присвоено значение, которое находится точно на границе между двумя ячейками?
Например. когда я звоню gsl_histogram_increment( h, x)с x равным 0, а ребра ячеек -0.2, 0, 0.2, 0.4 и т. д., получу ли я приращение положительного диапазона (0, 0.2) или отрицательного диапазона (-0.2, 0)?

РЕДАКТИРОВАТЬ: да мои диапазоны одинаковы.

1

Решение

если ваше распределение бина является линейным (как в вашем примере), то это код, который выполняется (взят из 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

обратите внимание на> = для нижнего края бункера и < для верхнего края бина, поэтому ваше значение 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 ;

обратите внимание, что использование> = подразумевает, что значение, попадающее на край ячейки, будет включено в «верхнюю» ячейку двух (так же, как в линейном случае)

возможно, проверьте еще раз, запустив ваш пример и наблюдая, к какому бину добавляется значение

3

Другие решения

gsl_histogram_increment кажется использовать состояние L <= x < U для решения, стоит ли ставить стоимость x в мусорном ведре (L, U), Так 0 в конечном итоге в (0, 0.2),

1

По вопросам рекламы [email protected]