Учитывая список точек obstacles
(заданные в виде списка row, column
матричных координат, в ndarray формы (n, 2)
), возвращает карту размера size
(где size
является формой массив 2D NumPy), в котором значение r, c
является евклидовым расстоянием до ближайшего «препятствия».вычисление карты минимального расстояния до числа точек
def gen_distgrid(size, obstacles):
n_obstacles = obstacles.shape[0]
distgrids = np.zeros((n_obstacles + 4, size[0], size[1]))
for layer in range(n_obstacles):
for i in range(size[0]):
for j in range(size[1]):
distgrids[layer, i, j] = np.linalg.norm(obstacles[layer,:] - [i,j])
for i in range(size[0]):
for j in range(size[1]):
distgrids[n_obstacles + 0, i, j] = i
distgrids[n_obstacles + 1, i, j] = (size[0] - i)
distgrids[n_obstacles + 2, i, j] = j
distgrids[n_obstacles + 3, i, j] = (size[1] - j)
distgrid = np.min(distgrids, axis=0)
return distgrid
Мой метод очень медленный, и я чувствую, что должен быть лучший.
Извините, что такое 'r' и' c'? – mgilson
@mgilson: строка и столбец, или вы можете сказать 'i, j'. –
Итак, для каждого препятствия вы хотите узнать, какое другое препятствие является самым близким? – mgilson