Мой пример близок к примеру вопроса Python: как вычислить расстояние между ячейками? , но я хочу рассчитать расстояние между двумя ячейками с учетом того, что расстояние между соседние ячейки всегда равны 1 (включая диагонали). Позвольте мне объяснить:
Предположим, у меня есть следующая 2D-сетка:
20 21 22 23 24
15 16 17 18 19
10 11 12 13 14
5 6 7 8 9
0 1 2 3 4
Мне нужна функция, которая в качестве аргумента имеет 2 индекса ячеек и возвращает расстояние между ними, чтобы расстояние между соседними ячейками равно 1 (диагональные ячейки тоже смежные).
Я пробовал что-то вроде этого:
import numpy as np
import numba as nb
@nb.njit # to speed up the code with numba
def distance(a,b,n=5):
x1 = a%n; x2 = b%n;
y1 = a//n; y2 = b//n
return np.floor(np.sqrt( (x1-x2)**2 + (y1-y2)**2 ))
Однако это работает для некоторых ячеек, но не для других , например:
>>> distance(2,7)
1.0 # works!
>>> distance(3,11)
2.0 # works!
>>> distance(0,24)
5.0 # wrong! it should be 4.0
>>> distance(0, 23)
5.0 # wrong! it should be also 4.0
Я имею в виду, я думаю, что линейные расстояния хорошо рассчитаны, но диагональные расстояния не все