Я пытаюсь создать 2-мерные сегменты в q
. При заданной 2-мерной сетке
5 o---o---o
| | |
3 o---o---o
| | |
0 o---o---o
0 3 5
каждый узел в сетке определяет границу 2-мерных сегментов для натуральных чисел.Например, центральный узел будет содержать кортежи (x;y)
, где 3<=x<5
и 3<=y<5
.Девять сегментов индексируются из 0,...,8
.
Я пытался реализовать это в q как
bucketidx:{((0 3 5i) cross (0 3 5i)) bin "i"$(first x;last x)}
Чтобы пройти через сегменты:
bucketidx each ((0 3 5i) cross (0 3 5i))
/0j, 1j, 2j, 3j, 4j, 5j, 6j, 7j, 8j
Однако я получаю странное поведение на bucketidx 6 0
.Я ожидаю, что это будет в верхнем левом узле
(5<=y) and (x=0)
, но он возвращает индекс 8
, который будет верхним правым узлом.Надеюсь, понятно, что я пытаюсь сделать.
Спасибо за помощь