python - 计算到多个点的最小距离的 map

标签 python algorithm math numpy computational-geometry

给定点列表obstacles(作为行,列矩阵坐标的列表,形状为(n,2)的ndarray),返回一个大小为 size 的映射(其中 size 是二维 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

我的方法真的很慢,我觉得应该有更好的方法。

最佳答案

Here是使用 Numpy 和 SciPy 的 KD 树解决类似问题的方法。只需将您的障碍物插入 KD 树并查询树中的每个网格点以获得其最近的邻居。

关于python - 计算到多个点的最小距离的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31899270/

相关文章:

c - Google Calculator Glitch,float vs. double 可能是一个可能的原因吗?

python - 何时以及为何使用 load_host_keys 和 load_system_host_keys?

python - 在 Python 2 或 Python 3 上导入 Openpyxl

algorithm - 使用 BFS 绘制最小生成树

algorithm - 如何使用组改进暴力破解算法?

java - 二进制 watch 算法 (Java)

计算e^x的C++程序

javascript - 如何使用 Math.pow() 来求解复利?

python - python如何返回Windows下当前正在处理的文件名

python - 无法从 Makefile 激活 python venv 环境