Python实现二维坐标系所有点间欧氏距离计算求助
Python实现欧氏距离求和算法
需求说明
计算给定4个点中,每个点与其余所有点的欧氏距离,并将所有这些距离求和(包含点对的双向计算,比如point1→point2和point2→point1都会被计入)。
实现步骤
- 定义点数据:将输入的点坐标整理为Python列表,方便遍历。
- 欧氏距离公式:两点
(x_a, y_a)和(x_b, y_b)的距离为:√[(x_a - x_b)² + (y_a - y_b)²] - 遍历所有点对:通过双重循环计算每一组点对的距离并累加。
代码实现(含重复计算)
import math # 替换为实际的点坐标数值 points = [(x1, y1), (x2, y2), (x3, y3), (x4, y4)] total_sum = 0.0 # 遍历每个点,与其余所有点计算距离 for idx, (x1, y1) in enumerate(points): for jdx, (x2, y2) in enumerate(points): # 跳过点自身与自身的组合 if idx == jdx: continue # 计算欧氏距离 dist = math.sqrt((x1 - x2)**2 + (y1 - y2)**2) total_sum += dist print(f"所有点对的距离总和:{total_sum}")
优化版本(避免重复计算)
如果不需要重复计算双向点对(比如只算一次point1→point2,不再算point2→point1),可以调整循环逻辑,只遍历j > i的点对:
import math points = [(x1, y1), (x2, y2), (x3, y3), (x4, y4)] total_sum = 0.0 for i in range(len(points)): x_a, y_a = points[i] # 只遍历当前点之后的点,避免重复计算 for j in range(i + 1, len(points)): x_b, y_b = points[j] dist = math.sqrt((x_a - x_b)**2 + (y_a - y_b)**2) total_sum += dist print(f"唯一点对的距离总和:{total_sum}")
使用说明
把代码中的x1,y1、x2,y2等替换成实际的坐标数值即可运行,比如points = [(1,2), (3,4), (5,6), (7,8)]。
内容的提问来源于stack exchange,提问作者jonas gonçalves
相关产品推荐
相关产品推荐

