You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python新手求助:如何查找路径点到另一路径的最近点及距离?

找每个点的最近邻点及距离解决方案

步骤1:导入依赖库并加载数据

先确保你已经安装了pandas和numpy,如果没装可以在Jupyter里用!pip install pandas numpy安装。

加载CSV并提取坐标数组:

import pandas as pd
import numpy as np

# 加载两个数据集
df1 = pd.read_csv('dataset1.csv')  # 替换成你的数据集1文件名
df2 = pd.read_csv('dataset2.csv')  # 替换成你的数据集2文件名

# 提取X、Y坐标为numpy数组
points1 = df1[['X', 'Y']].values  # 假设CSV列名为X和Y,不是的话改成你的列名
points2 = df2[['X', 'Y']].values

步骤2:计算所有点对的距离并找最近邻

用numpy的广播特性一次性计算所有点之间的欧氏距离,再快速找出每个点1对应的最近点2:

# 计算点1到所有点2的欧氏距离矩阵
# 形状为 (点1数量, 点2数量)
distances = np.linalg.norm(points1[:, np.newaxis] - points2, axis=2)

# 找出每个点1对应的最小距离和点2的索引
min_distances = np.min(distances, axis=1)  # 每个点1的最近距离
closest_point_indices = np.argmin(distances, axis=1)  # 对应点2在df2中的索引

步骤3:将结果合并到原数据集

把最近点的坐标和距离添加到df1中,方便查看:

# 把最近点的X、Y坐标和距离加入df1
df1['closest_X'] = df2.loc[closest_point_indices, 'X'].values
df1['closest_Y'] = df2.loc[closest_point_indices, 'Y'].values
df1['min_distance'] = min_distances

# 查看结果
print(df1.head())

补充说明

  • 如果你的CSV列名不是X和Y,记得把代码里的列名替换成实际名称。
  • 如果数据集特别大(比如超过10万条数据),上面的方法可能会占用较多内存,这时可以用sklearn.neighbors.KDTree来优化,示例代码如下:
from sklearn.neighbors import KDTree

# 构建KDTree
tree = KDTree(points2)
# 查询每个点1的最近邻(k=1表示找最近的1个点)
min_distances, closest_point_indices = tree.query(points1, k=1)
# 注意这里min_distances是二维数组,需要转成一维
min_distances = min_distances.flatten()
closest_point_indices = closest_point_indices.flatten()

# 后续合并步骤和上面一样

内容的提问来源于stack exchange,提问作者Andrew Lindsay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:26:16