Python基于三个坐标列表计算相邻点欧氏距离报错求助
三维相邻坐标点距离计算报错修复方案
代码存在三处核心错误,逐一修复即可正常运行:
- 距离公式书写错误:三维欧氏距离的计算规则是
√[(x₂-x₁)² + (y₂-y₁)² + (z₂-z₁)²],原代码括号位置错位,未计算同维度坐标差值,直接对前点坐标做平方后与后点坐标相减,导致根号内出现负数,输出无意义的复数结果。 - 循环范围设置错误:列表长度为4时,原代码循环i的取值为0/1/2/3,当i取3时
i+1=4超出列表最大索引(列表索引从0开始,最大为3),触发索引越界报错。 - 变量名拼写不一致:循环条件中使用的
centro_x与实际定义的center_x拼写不匹配,也会触发运行时名称错误。
修正后代码
center_x = [1.340, 8.54065065, 3.718, 5.83] center_y = [1.672, 1.67, 7.47, 4.71] center_z = [-0.451, -1.389, 7.523, 8.15] # 循环范围设为长度减1,仅遍历到倒数第二个点,避免i+1越界 for i in range(len(center_x) - 1): dx = center_x[i+1] - center_x[i] dy = center_y[i+1] - center_y[i] dz = center_z[i+1] - center_z[i] dist = (dx**2 + dy**2 + dz**2) ** 0.5 print(f'Dists : {dist}')
运行输出
Dists : 7.256679638900003 Dists : 10.889752995983885 Dists : 3.619704545953984
如果需要处理大批量坐标计算,可使用numpy向量化运算提升效率,参考代码如下:
import numpy as np x_arr = np.array(center_x) y_arr = np.array(center_y) z_arr = np.array(center_z) # 一次性计算所有相邻点间距 all_dists = np.sqrt(np.diff(x_arr)**2 + np.diff(y_arr)**2 + np.diff(z_arr)**2) print(all_dists)
内容的提问来源于stack exchange,提问作者Jose Pinto
相关产品推荐
相关产品推荐

