如何不导入第三方包实现两个元组列表中点的欧氏距离批量计算
问题原因分析
尝试1报错原因
- 函数内部未定义
point1变量,运行时会首先触发名称错误 - Python原生不支持
tuple类型直接执行减法运算,dataset1[i] - dataset2[i]是直接对两个坐标元组做减法,因此抛出类型错误 - 函数参数设计不符合需求:该函数应该接收两个单点位参数计算距离,而不是直接传入两个完整数据集
尝试2报错原因
- 循环逻辑错误:你用
len(dataset1)作为循环上限,但dataset2长度远小于dataset1,当索引超过dataset2的最大下标时就会触发索引越界 - 业务逻辑不符:需求是dataset2每个点和dataset1所有点逐一计算距离,而你写的是按索引对位计算两个数据集的对应点距离,完全不符合需求
正确实现代码
# 先定义两个单点之间的欧氏距离计算函数,支持任意维度点位 def calc_single_distance(point_a, point_b): distance = 0 for a_coord, b_coord in zip(point_a, point_b): distance += (a_coord - b_coord) ** 2 return distance ** 0.5 # 外层遍历逻辑,按需求计算所有组合的距离 def calc_all_distances(dataset1, dataset2): result = [] for d2_point in dataset2: single_d2_distances = [] for d1_point in dataset1: single_d2_distances.append(calc_single_distance(d1_point, d2_point)) result.append(single_d2_distances) return result # 样例测试 dataset1 = [(1.5, 2.4), (-7.9, 3.5), (6.3, 6.2), (8.3, 4.1), (4.1, 4.2)] dataset2 = [(2.9, 3.0), (4.3, 2.9)] print(calc_all_distances(dataset1, dataset2))
运行后返回的二维列表中,第一个子列表为dataset2第0个点和dataset1所有点的距离,第二个子列表为dataset2第1个点和dataset1所有点的距离,完全匹配需求。
内容的提问来源于stack exchange,提问作者user14268322
相关产品推荐
相关产品推荐

