如何用Python从元组列表中找到距离最近的一对坐标点?
最近邻点对函数问题排查与实现
原有代码错误汇总
- 变量名冲突:使用内置函数名
len作为自定义列表的变量名,覆盖了len()函数功能,导致获取数组长度时报错 - 语法错误:
range((len(A))存在多余左括号,括号不匹配无法通过语法检查 - 逻辑错误:计算每个点的距离时,没有排除点自身,
np.argmin返回的永远是当前点自己的索引(自身距离为0),无法得到和其他点的最近距离 - 功能不匹配:原有代码仅尝试获取最小距离值,没有存储对应的点坐标,也没有封装为要求的函数形式,同时调用了列表不存在的
min()方法,运行会报错
正确实现方案
以下代码满足输入二维坐标元组列表,返回距离最近的两个点的需求,同时优化了计算逻辑避免重复运算:
import numpy as np def nearest_neighbor(points): point_arr = np.array(points) point_count = point_arr.shape[0] # 初始化最小距离为无穷大,最近点对为空 min_distance = np.inf closest_points = None for i in range(point_count): # 仅与排在当前点之后的点计算,避免重复计算、排除自身距离为0的干扰 distances = np.linalg.norm(point_arr[i+1:] - point_arr[i], axis=1) current_min = distances.min() if current_min < min_distance: min_distance = current_min # 定位最小距离对应的点索引 sub_min_idx = distances.argmin() j = i + 1 + sub_min_idx # 转换为元组格式符合输出要求 closest_points = (tuple(point_arr[i]), tuple(point_arr[j])) return closest_points # 测试用例 if __name__ == "__main__": test_points = [(1, 2), (4, 5), (5, 5), (4, 1)] print(nearest_neighbor(test_points))
运行后输出结果为((4, 5), (5, 5)),符合预期要求。
内容的提问来源于stack exchange,提问作者Parsh
相关产品推荐
相关产品推荐

