如何在纯 Python 中构建客户坐标间的二维距离矩阵
发布时间 - 2025-12-29 00:00:00 点击率:次本文介绍如何不依赖 numpy 或 pandas,仅用标准库和嵌套循环,将一组具有 x/y 坐标的客户对象构建成完整的二维距离矩阵(即对称方阵),每行表示某客户到所有客户的欧氏距离。
要生成真正的二维距离矩阵(而非扁平化的一维列表),关键在于:外层循环遍历每个客户 i,内层循环计算 i 到所有客户 j 的距离,并将这些距离收集为一个子列表;再将该子列表整体追加到主列表中。这样最终得到的 Distances 就是一个 n × n 的嵌套列表,满足 Distances[i][j] 表示第 i 个客户到第 j 个客户的欧氏距离。
以下是修正后的完整实现(假设已导入 math.sqrt):
from math import sqrt
# 距离计算函数(优化版:直接返回,避免中间变量)
def get_distance(a, b):
dx = a.getX() - b.getX()
dy = a.getY() - b.getY()
return sqrt(dx * dx + dy * dy)
# 构建二维距离矩阵
Distances = []
for i in range(nr_customers):
row = [] # 初始化第 i 行
for j in range(nr_customers):
row.append(get_distance(cu
stomer[i], customer[j]))
Distances.append(row) # 将整行加入矩阵✅ 结果验证示例:
若 nr_customers = 3,则 Distances 形如:
[
[0.0, d01, d02], # customer[0] → all
[d10, 0.0, d12], # customer[1] → all
[d20, d21, 0.0] # customer[2] → all
]由于欧氏距离对称,dij == dji,且对角线恒为 0.0(自身到自身距离为 0)。
⚠️ 注意事项:
- 确保 customer 是长度为 nr_customers 的客户对象列表,且每个对象实现了 getX() 和 getY() 方法;
- 若需提升性能(尤其客户数 > 1000),可考虑提前缓存坐标元组(如 coords = [(c.getX(), c.getY()) for c in customer]),避免重复调用方法;
- 本方案时间复杂度为 O(n²),空间复杂度也为 O(n²),适用于中小规模数据;
- 文中提及的 scipy.spatial.distance_matrix 虽简洁高效,但因明确禁止使用第三方科学计算库,故不作为推荐解法,仅作知识补充。
至此,你已获得一个结构清晰、可直接索引访问的标准二维距离矩阵,可用于后续路径规划、聚类分析或启发式算法等场景。
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
javascript基本数据类型及类型检测常用方法小结
油猴 教程,油猴搜脚本为什么会网页无法显示?
Linux系统运维自动化项目教程_Ansible批量管理实战
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
Python自动化办公教程_ExcelWordPDF批量处理案例
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
jQuery中的100个技巧汇总
Laravel中的Facade(门面)到底是什么原理
jQuery validate插件功能与用法详解
详解jQuery中的事件
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
nodejs redis 发布订阅机制封装实现方法及实例代码
如何在建站主机中优化服务器配置?
深圳网站制作培训,深圳哪些招聘网站比较好?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
Laravel如何使用Gate和Policy进行授权?(权限控制)
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
WordPress 子目录安装中正确处理脚本路径的完整指南
如何快速生成ASP一键建站模板并优化安全性?
深圳网站制作平台,深圳市做网站好的公司有哪些?
昵图网官网入口 昵图网素材平台官方入口
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
详解CentOS6.5 安装 MySQL5.1.71的方法
大同网页,大同瑞慈医院官网?
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
C语言设计一个闪闪的圣诞树
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
UC浏览器如何设置启动页 UC浏览器启动页设置方法
Java解压缩zip - 解压缩多个文件或文件夹实例
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
如何在腾讯云服务器上快速搭建个人网站?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
zabbix利用python脚本发送报警邮件的方法
桂林网站制作公司有哪些,桂林马拉松怎么报名?
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
Laravel如何处理文件下载请求?(Response示例)
简单实现Android验证码


stomer[i], customer[j]))
Distances.append(row) # 将整行加入矩阵