Импорт базы данных очень медленный

Будьте очень осторожны: все ответы на этой странице неявно принимают решение о том, где начинается битнинг - левый край самого левого лотка, если хотите, - из рук пользователя. Если пользователь объединяет любую из этих функций для объединения данных с собственным решением о том, где начинается биннинг (как это делается в блоге, который связан с выше), приведенные выше функции являются неправильными. С произвольной начальной точкой для бинания «Мин» правильная функция:

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 действительно попадает в левый бит:

  • эта функция правильно отображает его в центр левой ячейки (0.75);
  • Ответ Born2Smile, bin (x) = ширина * пол (x / ширина), неверно отображает его на 1;
  • ответ mas90, bin (x) = ширина * пол (x / width) + binwidth / 2.0, неверно отображает его до 1.5.

Ответ Born2Smile верен только в том случае, если границы бинов встречаются в (n + 0,5) * binwidth (где n пробегает целые числа). Ответ mas90 верен только в том случае, если границы бинов встречаются при n * бинарнике.

1
задан a_horse_with_no_name 18 January 2019 в 13:11
поделиться