Python构建客户距离矩阵求助(禁用Numpy/Pandas)
解决方案
你的核心问题是当前代码将所有客户间距离存入了一维列表,要改成二维距离矩阵(每个子列表对应单个客户到所有其他客户的距离)。修改思路很直接:在外层循环中为每个客户创建一行距离列表,内层循环计算该客户到所有客户的距离并填充到行列表,最后把行列表加入到矩阵中。
修改后的代码如下:
from math import sqrt # 确保导入sqrt函数,否则会报错 # 计算两点间距离 def get_distance(a,b): d = [a.getX()- b.getX() , a.getY() - b.getY()] return sqrt(d[0] * d[0] + d[1] * d[1]) # 生成客户间距离矩阵 distance_matrix = [] for i in range(nr_customers): # 为当前客户i初始化一行距离列表 current_row = [] for j in range(nr_customers): # 计算一次距离并存储,避免重复调用函数浪费资源 dist = get_distance(customer[i], customer[j]) current_row.append(dist) # 将该行加入距离矩阵,形成二维结构 distance_matrix.append(current_row)
关键修改说明:
- 外层循环新增
current_row = [],专门存储当前客户i到所有客户j的距离 - 内层循环将计算结果添加到行列表,而非直接追加到外层矩阵
- 移除了原代码中重复调用
get_distance的冗余操作,优化了性能
修改后,distance_matrix会是一个nr_customers × nr_customers的二维列表,比如3个客户的矩阵结构如下:
[ [客户0到0的距离, 客户0到1的距离, 客户0到2的距离], [客户1到0的距离, 客户1到1的距离, 客户1到2的距离], [客户2到0的距离, 客户2到1的距离, 客户2到2的距离] ]
内容的提问来源于stack exchange,提问作者sam_kel27
相关产品推荐
相关产品推荐

