如何在纯 Python 中构建客户坐标的二维距离矩阵
发布时间 - 2025-12-29 00:00:00 点击率:次本文介绍如何不依赖 numpy 或 pandas,仅用标准库和嵌套循环,将一组具有 x/y 坐标的客户对象构建成完整的二维距离矩阵(即对称方阵),其中 `distances[i][j]` 表示第 i 位客户与第 j 位客户之间的欧氏距离。
要生成真正的二维距离矩阵(而非一维扁平列表),关键在于:外层循环按客户索引 i 迭代,内层循环为该客户 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(customer[i], customer[j]))
Distances.append(row) # 将整行加入矩阵此时 Distances 是一个 nr_customers × nr_customers 的嵌套列表,满足:
- Distances[i][j] 即客户 i 到客户 j 的距离;
- 对角线元素 Distances[i][i] 恒为 0.0(自距离);
- 矩阵关于主对角线对称(因欧氏距离满足 d(i,j) = d(j,i))。
✅ 注意事项:
- 务必确保 customer 是已定义的客户对象列表,且每个对象实现了 getX() 和 getY() 方法;
- 若客户数量较大(如 >1000),该 O(n²) 算法仍可运行,但性能不如向量化库;不过本方案严格遵守“禁用 NumPy/Pandas”的约束;
- 可进一步封装为函数提升复用性:
def build_distance_matrix(customers):
n = len(customers)
matrix = []
for i in range(n):
row = []
for j in range(n):
row.append(get_distance(customers[i], customers[j]))
matrix.append(row)
return matrix
# 使用示例
Distances = build_distance_matrix(customer)该方法简洁、可读性强,完全基于 Python 原生语法,是教学与轻量级场景下构建距离矩阵的标准实践。
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何生成腾讯云建站专用兑换码?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Laravel API资源类怎么用_Laravel API Resource数据转换
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
html如何与html链接_实现多个HTML页面互相链接【互相】
Linux系统命令中tree命令详解
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
如何正确下载安装西数主机建站助手?
中国移动官方网站首页入口 中国移动官网网页登录
如何快速搭建自助建站会员专属系统?
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
Python进程池调度策略_任务分发说明【指导】
Laravel如何处理CORS跨域请求?(配置示例)
利用vue写todolist单页应用
如何快速配置高效服务器建站软件?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Laravel storage目录权限问题_Laravel文件写入权限设置
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
移动端脚本框架Hammer.js
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
在线制作视频网站免费,都有哪些好的动漫网站?
制作电商网页,电商供应链怎么做?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
IOS倒计时设置UIButton标题title的抖动问题
香港服务器网站卡顿?如何解决网络延迟与负载问题?
公司门户网站制作流程,华为官网怎么做?
手机网站制作与建设方案,手机网站如何建设?
Laravel怎么连接多个数据库_Laravel多数据库连接配置
如何在阿里云完成域名注册与建站?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
网易LOFTER官网链接 老福特网页版登录地址
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
Laravel如何处理表单验证?(Requests代码示例)
如何在万网利用已有域名快速建站?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
高防服务器如何保障网站安全无虞?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何用免费手机建站系统零基础打造专业网站?
iOS发送验证码倒计时应用
微信公众帐号开发教程之图文消息全攻略
魔方云NAT建站如何实现端口转发?
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Laravel如何与Pusher实现实时通信?(WebSocket示例)
javascript日期怎么处理_如何格式化输出
java ZXing生成二维码及条码实例分享

