Будьте очень осторожны: все ответы на этой странице неявно принимают решение о том, где начинается битнинг - левый край самого левого лотка, если хотите, - из рук пользователя. Если пользователь объединяет любую из этих функций для объединения данных с собственным решением о том, где начинается биннинг (как это делается в блоге, который связан с выше), приведенные выше функции являются неправильными. С произвольной начальной точкой для бинания «Мин» правильная функция:
bin(x) = width*(floor((x-Min)/width)+0.5) + Min
Вы можете понять, почему это правильно последовательно (это помогает сделать несколько бункеров и точку где-то в одном из них ). Вычитайте Min из вашей точки данных, чтобы увидеть, насколько далеко находится диапазон биннинга. Затем разделите по ширине бина, чтобы эффективно работать в единицах «бункеров». Затем «поместите» результат, чтобы перейти к левому краю этого бункера, добавьте 0,5, чтобы перейти к середине бункера, умножьте его на ширину, чтобы вы больше не работали в единицах бункеров, но в абсолютном масштабе снова, затем, наконец, добавьте обратно к смещению Min, которое вы вычитаете в начале.
Рассмотрим эту функцию в действии:
Min = 0.25 # where binning starts
Max = 2.25 # where binning ends
n = 2 # the number of bins
width = (Max-Min)/n # binwidth; evaluates to 1.0
bin(x) = width*(floor((x-Min)/width)+0.5) + Min
eg значение 1.1 действительно попадает в левый бит:
Ответ Born2Smile верен только в том случае, если границы бинов встречаются в (n + 0,5) * binwidth (где n пробегает целые числа). Ответ mas90 верен только в том случае, если границы бинов встречаются при n * бинарнике.