图匹配算法

2023-11-17

目录

1.子图同构算法实现图的匹配

2.利用点构建无向图


1.子图同构算法实现图的匹配

给你两个点集,如何判断两个点集是不是相同的,可以利用子图同构算法进行匹配。程序如下:

# -*- coding: utf-8 -*-
"""
Created on Thu Jun  1 11:24:23 2023

@author: whd
"""

import networkx as nx

# 创建第一个图
G1 = nx.Graph()
G1.add_edges_from([(1, 2), (1, 3), (2, 3), (3, 4)])

# 创建第二个图
G2 = nx.Graph()
#G2.add_edges_from([(10, 20), (10, 30), (20, 30), (30, 40)])
G2.add_edges_from([(30, 40),(10, 20), (20, 30), (10, 30)])

# 使用子图同构算法进行匹配
GM = nx.algorithms.isomorphism.GraphMatcher(G1, G2)

# 打印匹配结果
if GM.is_isomorphic():
    print("图匹配成功!")
    mapping = GM.mapping
    print("匹配节点映射关系:", mapping)
else:
    print("图匹配失败!")
  • 所有点放大相同倍数,变换点的位置,都能完成匹配。【比如这里的将所有的点放到10倍或者100倍,或者调换任意结果点的位置,均能完成匹配】
  • 但是将只要任何一个值,不是同比例的放大,比如最后一个值变为(10,31),则匹配失败。该算法完成的是硬性的匹配,对尺度变化和仿射均极度敏感。

2.利用点构建无向图

"""
Created on Thu Jun  1 11:17:50 2023

@author: whd
"""

import networkx as nx
import matplotlib.pyplot as plt

# 创建一个空的无向图
graph = nx.Graph()

# 添加节点
points = [(0, 5), (2, 10), (3, 6),(4,8)]
for i, point in enumerate(points):
    graph.add_node(i, pos=point)  # 将点坐标作为节点属性保存

# 添加边
# 这里可以根据需要定义边的连接关系,例如根据距离或其他几何条件来决定是否添加边
# 这里以连接所有节点为例,将所有节点两两之间都添加边
for i in range(len(points)):
    for j in range(i + 1, len(points)):
        graph.add_edge(i, j)

# 可视化图
pos = nx.get_node_attributes(graph, 'pos')
nx.draw(graph, pos=pos, with_labels=True, node_size=200)
plt.show()

效果如下:

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图匹配算法 的相关文章

  • thinkPHP6.0入门笔记(五)——数据表字段排序

    thinkPHP6 0实现数据表字段排序 1 利用order方法简单实现 2 URL优化排序 1 利用order方法简单实现 一般情况下排序是交给前端来实现的 后端一般主要是实现数据库的增删查改 但是PHP中经常出现order字段 由于后端
  • cuBLAS【CUDA专门用来解决线性代数运算的库】

    cuBLAS是CUDA专门用来解决线性代数运算的库 分为三个级别 Lev1向量乘向量 Lev2矩阵乘向量 Lev3矩阵乘矩阵 此外 cuBLAS库还包含一些功能和状态结构函数 学习网站为 参考资料 四 cuBLAS与cuDNN
  • mysql 快照和binlog_mysql binlog二进制日志详解

    mysql binlog二进制日志详解 更新时间 2011年10月31日 23 13 00 作者 二进制日志包含了所有更新了数据或者已经潜在更新了数据 例如 没有匹配任何行的一个DELETE 的所有语句 基本概念 定义 二进制日志包含了所有
  • Tcl脚本学习

    包的创建和调用 在tcl脚本中 我们可以通过创建和调用包来增强代码的可复用性 创建包的步骤 1 在包脚本文件中 首先声明 package provide 标识当前文件提供了一个包 之后在该文件中完成包的内容 2 通过pkg mkIndex命

随机推荐

  • element table 表格实现上移、下移

    业务场景 有时候需要前端实现上移和下移功能 代码如下 根据交互形式 我这里是把第一条数据的上移按钮置灰不可点击 disabled scope index 0 最后一条数据下移按钮置灰不可点击 disabled scope index 1 t
  • DCDC输入输出电容的选择和计算(转载)

    文章转自MPS论坛 https forum monolithicpower cn t topic 2105 目前市面上的电容种类繁多 在为我们的电源电路选择输入输出电容的时候难免会挑花了眼 本文就来浅析一下如何选择输入输出电容及其相关的计算
  • 企业运维经典面试题汇总(5)

    1 git和svn 的区别 Git是分布式的 而Svn不是分布的 Git把内容按元数据方式存储 而SVN是按文件 Git没有一个全局版本号 而SVN有 目前为止这是跟SVN相比Git缺少的最大的一个特征 Git的内容的完整性要优于SVN G
  • Qt-窗口嵌套exe

    某些特殊场景 我们要在主程序中嵌套第三方程序 这样臃肿的设计好比 在乡村小楼里面建设一个商业广场 本人不是很喜欢 Qt的QProcess和QWindow可以为我们完成这样的任务 核心思路即 QProcess启动第三方exe 获取进程ID w
  • 各种窗体操作的bug解决

    1 java lang IllegalArgumentException View com android internal policy impl PhoneWindow DecorView 41e0f220 V E R D 0 0 53
  • TensorFlow 2.0 安装指南

    TensorFlow 2 0 beta1 已经发布 本文详细介绍在个人电脑或服务器上安装 TensorFlow 2 0 beta1 的步骤和各种细节 让你第一次安装 TensorFlow 2 0 就上手 一般安装步骤 TensorFlow
  • RangeError: Maximum call stack size exceeded

    问题现场 执行环境 安卓设备 V8 引擎 Java 代码中调用 JavaScript 报错日志 2021 10 21 14 52 53 156 30457 30457 com fuck you E com fuck you JavaInvo
  • ‘vite’ 不是内部或外部命令,也不是可运行的程序或批处理文件问题解决

    问题解析 使用vite创建vue3 0项目的时候 vite不会自动 install 相关的依赖 需要我们手动去安装 进入项目的node modules目录里面查看 什么都没有 所以说出现这个问题的原因是 缺少安装依赖这一步 vite不像 n
  • 卷积神经网络之计算机视觉应用(一)

    卷积神经网络之计算机视觉应用 一 一 引言 21世纪开始 卷积神经网络就被成功的大量用于检测 分割 物体识别以及图像的各个领域 值得一提的是 图像可以在像素级别进行打标签 这样就可以应用在比如自动电话接听机器人 自动驾驶汽车等技术中 尽管卷
  • 宝元系统u盘使用说明_联想小新Air14使用U盘重装win7系统图解

    联想小新Air14是一款适合年轻人使用的笔记本 高大上的颜值符合现在阶段的年轻用户的审美要求 拥有很高的屏占比 还配置了一个酷酷的按压式指纹识别功能 得到了很多用户的喜爱 开机速度超快 运行流畅 能让用户感受不一样的使用体验 这款笔记本预装
  • element-ui 下拉菜单 el-dropdown-menu 组件 不能动态渲染数据怎么解决?

    关于element ui 下拉菜单 el dropdown menu 组件 不能动态渲染 数据怎么解决 element ui 官网中的例子是这样写的
  • State(状态模式)行为型

    状态模式 一 概述 二 结构 三 实例 四 适用场景 五 优缺点 一 概述 描述 一天有早中晚 不同时间下 太阳光是不一样的 所以随着早中晚的状态变化 太阳的行为也随着变化 定义 状态模式是一种行为设计模式 让你能在一个对象的内部状态变化时
  • Vs2013打开项目时,一直处理等待状态,并显示“Microsoft Visual Studio正忙”的提示窗,处理方法

    问题 现象 VS2013打开项目时 一直处理等待状态 并显示 Microsoft Visual Studio正忙 的提示窗 如下图 此时只能在window任务管理器关闭其进程devenv exe 但再将Vs打开 新建项目 又是好的 只是运行
  • buck电路_BUCK电路工作原理与常用词汇介绍

    首先总结用的最多的电源 1 软启动 AP3502E的PIN8为SS 意思就是soft start 软启动 那么什么是软启动呢 软启动就是使得输出电压慢慢上升到固定值 目的很简单就是为了降低上电瞬间各器件的应力 图片如下 通常的设计在SS脚处
  • kafka如何避免消费组重平衡

    目录 前言 协调者 重平衡的影响 避免重平衡 重平衡发生的场景 参考资料 前言 Rebalance 就是让一个 Consumer Group 下所有的 Consumer 实例就如何消费订阅主题的所有分区达成共识的过程 在 Rebalance
  • iMX8MM启动流程

    iMX8MM启动流程 1 Boot ROM 2 IVT和DCD 3 启动流程 4 总结 我移植的板子是讯为i MX8MM开发板 参考板为官方 8MMINILPD4 EVK开发板 iMX8MM uboot2021 04 linux5 15 3
  • LeetCode: 14

    Count Binary Substrings 简单 但是需要判断啥时候计数 清零 class Solution public int countBinarySubstrings string s if s size lt 1 return
  • kafka知识 --kafka权威指南

    我想既然Kafka是为了写数据而产生的 那么用作家的名字来命名会显得更有意义 我在大学时期上过很多文学课程 很喜欢Franz Kafka 况且 对于开源项目来说 这个名字听起来很酷 因此 名字和应用本身基本没有太多联系 Jay Kreps
  • Jmeter下载安装配置---测试小白

    首先放上我索的照片辟邪 哈哈哈哈 闲话少说 进入正题 一 进入官网 http jmeter apache org 1 第一步进入官网如下图 2 选择进行下载 下载下来为一个压缩包 解压即可 3 我下载的是jmeter4 0版本 对应jdk1
  • 图匹配算法

    目录 1 子图同构算法实现图的匹配 2 利用点构建无向图 1 子图同构算法实现图的匹配 给你两个点集 如何判断两个点集是不是相同的 可以利用子图同构算法进行匹配 程序如下 coding utf 8 Created on Thu Jun 1