当前位置: 首页 > news >正文

深入解析:把“距离过近”的节点(或端点)合并成一个,避免重复。机器学习 python

深入解析:把“距离过近”的节点(或端点)合并成一个,避免重复。机器学习 python

函数作用一句话

把“距离过近”的节点(或端点)合并成一个,避免重复。


应用场景

  1. 节点去重

  2. 端点聚类

  3. 可视化降噪


⚙️ 原理拆解

步骤代码片段解释
1. 输入nodes = [(x1,y1), (x2,y2), ...]原始点列表,可能有重复/过近。
2. 转 NumPypts = np.array(nodes)方便广播计算欧氏距离。
3. 贪心聚类for i, p in enumerate(pts): ...每个未用点作为“种子”,找所有距离 < eps 的点归为一组。
4. 计算新坐标np.round(np.mean(group, axis=0))用组内点的几何中心作为合并后的新坐标,避免偏移。
5. 去重输出return list(set(...))防止重复添加。

参数 eps 怎么选?

场景推荐 eps
手绘电路,像素粗8 ~ 12
高清扫描/矢量图3 ~ 5
不确定先试 8,再视结果微调。

✅ 一句话总结

把“像素级误差”的多个点 → 聚类成“物理级”唯一节点/引脚。

# 合并相邻节点
def merge_nearby_nodes(nodes, eps=10):
"""
合并相邻节点(欧氏距离 < eps)
输入:[(x1,y1), (x2,y2), ...]
输出:合并后的节点列表
"""
if not nodes:
return []
# 转成 numpy,便于广播计算
pts = np.array(nodes).reshape(-1, 2)
merged = []
used = np.zeros(len(pts), dtype=bool)
for i, p in enumerate(pts):
if used[i]:
continue
group = [p]
used[i] = True
for j, q in enumerate(pts[i+1:], start=i+1):
if not used[j] and np.linalg.norm(p - q) < eps:
group.append(q)
used[j] = True
# 取平均坐标作为合并后的节点
merged.append(tuple(np.round(np.mean(group, axis=0)).astype(int)))
return merged
http://www.sczhlp.com/news/13190/

相关文章:

  • 5.2 基本的文件处理
  • 标注工具Labelimg的安装与使用
  • 分布式调度XXL-JOB - 详解
  • 碎碎念(十二)
  • 25-暑期-来追梦noip-卷2
  • day13_MVC_前后端分离
  • day15_mybatis2
  • day14_mybatis1
  • 题解:AT_agc032_f [AGC032F] One Third
  • 数论专题-扩展欧几里得算法
  • codesys 当自己的库 操作 将工程另存为编译库报警:这个库的文件输出部分不可用,可装库文档支持包 方便别人,方便自己!
  • 服务器部署notebook+xedu+机器学习编程环境多用户登录
  • neovim初探
  • Ubunutu终端配置
  • 数论专题-裴蜀定理
  • Proto实践
  • 【大二病也要学离散!】第六章 欧拉图与哈密顿图
  • 动态dp总结
  • Script-Server 脚本Web化管理工具​​ - Leonardo
  • 题解:[CSP-S2019] Emiya 家今天的饭
  • ESP32-S3 控制 SD卡
  • ESP32-S3 控制 WIFI
  • ESP32-S3 控制 红外遥控
  • ESP32-S3 控制 舵机
  • 代码随想录算法训练营第八天(字符串篇)|Leetcode151翻转字符串中的单词,卡码网右旋转字符串,Leetcode28实现Strstr(),Leetcode459重复的子字符串
  • 数论专题-欧拉定理与费马小定理
  • ESP32-S3 控制 OLED液晶显示
  • Arduino PWM 引与 Atmega 引脚对应关系
  • ESP32-S3 控制 超声波测距
  • 无痕检测是否注册iMessage服务,iMessages数据筛选,iMessage蓝号检测协议